主函数内部静态分配大量内存

时间:2009-12-12 06:10:15

标签: c data-structures programming-languages

我有一个程序必须在C中声明一个大小为1000000的巨大整数数组(使用GNU GCC编译器)。我尝试以两种不同的方式声明数组。

两个可能的代码是:

#include <stdio.h>
int arr[1000000];
int main()
{
  return 0; 
}

#include <stdio.h>
int main()
{
  int arr[1000000];
  return 0;
}

后一版本在运行时挂起。可能的原因是什么?

非常感谢!!!

2 个答案:

答案 0 :(得分:9)

第二个版本在堆栈上分配,对于任何给定的进程,其大小可能在您的系统上受到限制。第一个在流程的数据段中分配,其大小不受限制(至少对于这些分配大小的数量级)

this SO answer,您可以了解如何检查各种平台(如Linux和Windows)的堆栈分配限制。如果您使用的是Linux,那就简单了:

ulimit -a

答案 1 :(得分:2)

由于您在标题中使用了 static 这个词,因此实际声明变量static并不会发生这种情况。

int main()
{
  static int arr[1000000];
  return 0;
}

您也可以使用动态分配。