我正在开发一个关于在Ubuntu系统上测量缓存大小的c程序。我在cache.c中实现函数并在main.c文件中调用它们。一切都很好。由于代码不长,我将所有函数从cache.c移到main.c,以便方便地修改代码。
通过输入gcc -o main main.c编译主文件后,没有错误显示。然后我通过命令./main执行程序。什么都没发生。我的计划有什么问题?
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define KB 1024
#define MB 1024 * 1024
int main (int argc, char ** argv[])
{
static char arr[128 * 1024];
unsigned int steps = 10000; //4 * 1024 * 1024;
unsigned int size = sizeof(arr) / sizeof(char);
clock_t start, end;
double time_taken;
// calculate the cache size
void cache_size()
{
for (int k = 8 * KB; k < size; k+= 8 * KB)
{
// count start time
start = clock();
for (int i = 0; i < steps; i++)
for (int j = 0; j < k; j += 64)
arr[j] = 1;
// count end time
end = clock();
// calculate time taken
time_taken = (double)(end - start) / CLOCKS_PER_SEC;
printf("Test block: %d KB\tTime: %f secs\n", k / KB, time_taken);
}
printf("-----------------------------------------------\n");
}
return 0;
}
答案 0 :(得分:0)
您实际上并没有致电cache_size
。你正在定义它。实际上,您正在使用特定于编译器的扩展,该扩展允许在另一个内部定义一个函数。这不是一个好习惯。
将函数定义移到main
之外,然后从main
内部调用它。
static char arr[128 * 1024];
unsigned int steps = 10000; //4 * 1024 * 1024;
unsigned int size = sizeof(arr) / sizeof(char);
clock_t start, end;
double time_taken;
// calculate the cache size
void cache_size()
{
for (int k = 8 * KB; k < size; k+= 8 * KB)
{
// count start time
start = clock();
for (int i = 0; i < steps; i++)
for (int j = 0; j < k; j += 64)
arr[j] = 1;
// count end time
end = clock();
// calculate time taken
time_taken = (double)(end - start) / CLOCKS_PER_SEC;
printf("Test block: %d KB\tTime: %f secs\n", k / KB, time_taken);
}
printf("-----------------------------------------------\n");
}
int main (int argc, char ** argv[])
{
cache_size();
return 0;
}