调用clock()时出现分段错误

我想了解使用下面的程序以编程方式caching的影响。 我正在与代码段错误。 我使用GDB(用-g -O0编译),发现它是分段错误

 start = clock() (first occourance) 

难道我做错了什么? 代码对我来说看起来很好。 有人能指出这个错误吗?

 #include <stdio.h> #include <sys/time.h> #include <time.h> #include <unistd.h> #define MAX_SIZE (16*1024*1024) int main() { clock_t start, end; double cpu_time; int i = 0; int arr[MAX_SIZE]; /* CPU clock ticks count start */ start = clock(); /* Loop 1 */ for (i = 0; i < MAX_SIZE; i++) arr[i] *= 3; /* CPU clock ticks count stop */ end = clock(); cpu_time = ((double) (end - start)) / CLOCKS_PER_SEC; printf("CPU time for loop 1 %.6f secs.\n", cpu_time); /* CPU clock ticks count start */ start = clock(); /* Loop 2 */ for (i = 0; i < MAX_SIZE; i += 16) arr[i] *= 3; /* CPU clock ticks count stop */ end = clock(); cpu_time = ((double) (end - start)) / CLOCKS_PER_SEC; printf("CPU time for loop 2 %.6f secs.\n", cpu_time); return 0; } 

Solutions Collecting From Web of "调用clock()时出现分段错误"

尝试改变:

 int arr[MAX_SIZE]; 

至:

 int *arr = (int*)malloc(MAX_SIZE * sizeof(int)); 

由于Potatoswatter的建议The array might be too big for the stack …你可能会分配在堆上,而不是在堆栈上…

更多信息 。

数组可能对于堆栈太大了。 尝试使其成为static ,所以它进入全局变量空间。 作为额外的好处, static变量被初始化为全零。

与其他类型的存储不同,编译器可以在编译时检查全局资源是否存在(并且在程序启动之前操作系统可以在运行时进行双重检查),因此不需要处理内存不足错误。 未初始化的数组不会使您的可执行文件更大。

这是堆栈工作方式的一个不幸的边缘。 它位于固定大小的缓冲区中,由程序可执行程序根据操作系统进行配置,但其实际大小很少与可用空间进行检查。

欢迎来到Stack Overflow的土地!