在C语言中,局部声明大数组

6

为什么在C语言中局部声明大型数组不是一个好习惯?例如:int a[1000000];


1
提示:这个网站叫什么? - Joni
5个回答

6
因为它们被放在堆栈上,而堆栈只有有限的空间,所以需要注意。

5

如果你在本地声明变量,它们会被分配在栈上 - 如果栈太大,就会发生栈溢出而导致程序崩溃。


2

栈很小(大约4kb),但堆在机器上有更多的大小变量,使用指向int malloc()的指针动态分配数组。

要注意指针,祝你好运。


0

虽然可以事先调整堆栈空间,但还需要考虑从函数执行路径通过调用相同函数的可能性。例如:

void a() { int a[10000000]; b(); }
void b() { d(); c(); }
void c() { a(); } 

由于这种分析并不总是直截了当的,因此可能会导致溢出。


0

堆和栈的大小可以是任意的(如果实现配置为这样,栈可以比堆大100倍),但通常栈非常小,在递归函数中进行大量分配时会溢出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接