6

为什么在 C 中本地声明巨大的数组不好?例如:int a[1000000];

4

5 回答 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 回答