用C创建大型数组

我的问题与C语言有关。 我必须创建一个大约200万个元素的大数组,但计算机会出现“分段错误(Core dumped)”错误。 我只想说:

int integer_array[2000000]; float float_array[2000000]; 

我确信这与分配给数组的内存有关,但我无法找到正确的解决方案。

通常,您需要在堆上动态创建这样的数组。

 int *integer_array = (int*)malloc(2000000 * sizeof(int)); float *float_array = (float*)malloc(2000000 * sizeof(float)); 

数组可能对于堆栈分配来说太大,例如,如果不是全局使用,而是在函数内使用。

 int main () { int a[200000000]; /* => SEGV */ a[0]=0; } 

最简单的修复,将arrays移到外面:

 int a[200000000]; int main () { a[0]=0; } 

您也可以将其声明为静态:

 int main () { static int a[200000000]; a[0]=0; } 

请注意,堆栈大小取决于系统。 可以用ulimit改变它。

将它们定义为static或放在外部函数。 现在它们是自动的,并获得16MB的堆栈空间,这可能是非常小的。 顺便说一下,最好使用double而不是float