为什么在 C 中本地声明巨大的数组不好?例如:int a[1000000];
问问题
118 次
5 回答
6
因为它们进入堆栈,堆栈上只有有限的空间,
于 2013-03-17T22:41:02.273 回答
5
因为如果您在本地声明它们,它们就会在堆栈上声明 - 如果堆栈变得太大,您将出现堆栈溢出并且您的程序将崩溃。
于 2013-03-17T22:40:45.080 回答
2
堆栈很小(大约 4kb),但堆在机器上的大小变体更大,使用指向 int malloc() 的指针动态分配数组,
注意指针,祝你好运
于 2013-03-17T22:46:47.173 回答
0
虽然可以在一定程度上预先调整堆栈空间,但也需要考虑通过函数从执行路径调用同一个函数的可能性。例如:
void a() { int a[10000000]; b(); }
void b() { d(); c(); }
void c() { a(); }
由于这种分析并不总是直截了当的,因此可能会导致溢出。
于 2013-03-17T22:44:25.500 回答
0
堆栈和堆可以是任意大小(如果实现是这样配置的,堆栈可以比堆大 100 倍),但通常堆栈非常小,并且会因大量分配而溢出 - 特别是在递归函数中。
于 2013-03-17T22:52:17.760 回答