我正在研究关于在 Ubuntu 系统上测量缓存大小的 ac 程序。我在 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;
}
你实际上并不是在打电话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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句