在C中本地声明大型数组

时间:2013-03-17 22:39:44

标签: c arrays

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

5 个答案:

答案 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倍),但通常堆栈非常小,并且会溢出大量分配 - 特别是在递归中功能