为什么在C语言中局部声明大型数组不是一个好习惯?例如:int a[1000000];
如果你在本地声明变量,它们会被分配在栈上 - 如果栈太大,就会发生栈溢出而导致程序崩溃。
栈很小(大约4kb),但堆在机器上有更多的大小变量,使用指向int malloc()的指针动态分配数组。
要注意指针,祝你好运。
虽然可以事先调整堆栈空间,但还需要考虑从函数执行路径通过调用相同函数的可能性。例如:
void a() { int a[10000000]; b(); }
void b() { d(); c(); }
void c() { a(); }
由于这种分析并不总是直截了当的,因此可能会导致溢出。
堆和栈的大小可以是任意的(如果实现配置为这样,栈可以比堆大100倍),但通常栈非常小,在递归函数中进行大量分配时会溢出。