C 在主函数中静态分配大量内存

C 在主函数中静态分配大量内存,c,data-structures,programming-languages,C,Data Structures,Programming Languages,我有一个程序,它必须在C语言中声明一个1000000大小的大整数数组(使用GNU GCC编译器)。我试图用两种不同的方式声明数组 这两种可能的代码是: #include <stdio.h> int arr[1000000]; int main() { return 0; } #包括 国际农业资源[1000000]; int main() { 返回0; } 及 #包括 int main() { 国际农业资源[1000000]; 返回0; } 后一个版本在运行时挂起。可能的原

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

这两种可能的代码是:

#include <stdio.h>
int arr[1000000];
int main()
{
  return 0; 
}
#包括
国际农业资源[1000000];
int main()
{
返回0;
}

#包括
int main()
{
国际农业资源[1000000];
返回0;
}
后一个版本在运行时挂起。可能的原因是什么


非常感谢

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

从中,您可以了解如何检查Linux和Windows等各种平台的堆栈分配限制。如果您使用的是Linux,那么它非常简单:

ulimit -a
由于您在标题中使用了static一词,因此奇怪的是,实际上没有声明变量
static

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

您还可以使用动态分配。

如果需要,您通常可以通过gcc编译器选项增大堆栈大小。您应该能够要求gcc在编译期间标记堆栈溢出。@Paul当然,由于单独编译,大多数堆栈溢出只能在链接时标记?@Pascal:只有一些。。。递归使它具有不确定性——在运行之前,您永远不知道它有多深
int main()
{
  static int arr[1000000];
  return 0;
}