C 大小为2^25的数组
我试图在c中创建一个大小为2^25的数组,然后对其执行一些基本操作(memsweep函数)。c代码是C 大小为2^25的数组,c,arrays,time,swap,C,Arrays,Time,Swap,我试图在c中创建一个大小为2^25的数组,然后对其执行一些基本操作(memsweep函数)。c代码是 #include <stdio.h> #include <time.h> #define S (8191*4096) main() { clock_t start = clock(); unsigned i; volatile char large[S];
#include <stdio.h>
#include <time.h>
#define S (8191*4096)
main()
{
clock_t start = clock();
unsigned i;
volatile char large[S];
for (i = 0; i < 10*S; i++)
large[(4096*i+i)%S]=1+large[i%S];
printf("%f\n",((double)clock()-start)/CLOCKS_PER_SEC);
}
#包括
#包括
#定义S(8191*4096)
main()
{
时钟启动=时钟();
未签名的i;
挥发性炭大[S];
对于(i=0;i<10*S;i++)
大[(4096*i+i)%S]=1+大[i%S];
printf(“%f\n”,((双)时钟()-start)/每秒时钟数);
}
我可以编译它,但在执行时会出现分段错误。可能比堆栈大。你可以
- 使
全局变大
- 使用
malloc
char*large=malloc(S)
一起使用。您没有太多的堆栈空间来分配这么大的数组。。。例如,在Linux上,堆栈大小通常为8192字节。你肯定已经超过了
最好的选择是使用malloc()
在堆上分配内存。因此,您可以编写char*large=malloc(S)代码>。您仍然可以使用[]
符号访问阵列
或者,如果您在Linux上,您可以在命令行上调用sudoulimit-sx
,其中X是一个足够大的数字,足以让您的数组容纳在堆栈中。。。但我通常不鼓励这种解决方案。在堆栈上分配了大量资源,而您正在使其溢出
尝试使用char*large=malloc(S)
它比堆栈大!请尝试“char*larger=malloc(S)”而不是使用静态缓冲区。@很可能是selbie,但堆栈的大小是由实现定义的:)为了完整性:如果您一心想在堆栈上使用数组,编译器允许您在编译时指定堆栈大小。我不是在建议这种方法,而是在招致其他开发人员的愤怒@hackworks这将是一个坏主意,因为您的堆栈是固定大小的,并在每个线程的生命周期内保留。假设程序执行的不仅仅是这个循环,那么您只需要保留无法使用的内存。