为什么在C中本地声明大型数组并不好?例如:int a [1000000];
答案 0 :(得分:6)
因为它们进入堆栈,堆栈上只有有限的空间,
答案 1 :(得分:5)
因为它们是在堆栈中声明的,如果你在本地声明它们 - 如果堆栈变得太大,你将发生堆栈溢出,程序将崩溃。
答案 2 :(得分:2)
堆栈很小(约4kb)但堆在机器上有更多的大小变体,使用动态分配数组 指向int malloc()的指针,
注意指针和好运
答案 3 :(得分:0)
尽管可以在某种程度上提前调整堆栈空间,但还需要考虑从执行路径通过函数调用相同函数的可能性。例如:
void a() { int a[10000000]; b(); }
void b() { d(); c(); }
void c() { a(); }
由于这种分析并不总是直截了当,因此可能导致溢出。
答案 4 :(得分:0)
堆栈和堆可以是任何大小(如果实现以这种方式配置堆栈,堆栈可以比堆大100倍),但通常堆栈非常小,并且会溢出大量分配 - 特别是在递归中功能