数组2 ^ 25

时间:2011-05-21 07:16:01

标签: 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];
                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);
}

我能够编译它,但在执行时会产生分段错误。

4 个答案:

答案 0 :(得分:9)

这可能比你的筹码更大。你可以

  • 制作large全球
  • 使用malloc

答案 1 :(得分:4)

数组太大,无法放入堆栈。请将堆与char *large = malloc(S)一起使用。

答案 2 :(得分:3)

你没有那么多的堆栈空间来分配一个大的数组...例如,在Linux上,堆栈大小通常是8192字节。你肯定超过了那个。

最好的选择是使用malloc()在堆上分配内存。所以你会写char* large = malloc(S);。您仍然可以使用[]表示法访问数组。

可选地,如果你在Linux上,你可以在命令行上调用sudo ulimit -s X,其中X是一个足够大的数字,以便你的数组适合堆栈...但我通常不鼓励这个解决方案

答案 3 :(得分:3)

正在堆栈上分配大量而你正在溢出它。

尝试使用char *large = malloc(S)