C++ main函数中的数组

来源:互联网 发布:基础地理数据下载 编辑:程序博客网 时间:2024/06/05 09:05

C++ 大数组


问题:为什么不能在main函数中设置过大的数组?

首先要提及一下函数调用,即调用者向被调用者传递一些参数,然后执行被调用者的代码,最后被调用者向调用者返回结果。

再者,C++程序的内存格局通常分为四个区:全局数据区(data area)、代码区(code area)、栈区(stack area)、堆区(heap area)(即自由存储区),全局数据区存储全局变量、静态变量和常量;所有类成员函数和非成员函数代码存放在代码区;为运行变量而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区。

由此可知,若将数组设置在main函数中,它将因为是局部变量而被放入对应栈中,而C++中栈的大小默认是比较小的,1MB左右,若作为局部变量的数组的大小过大,可能会导致栈溢出而致程序无法正常运行。应将其定义为全局变量,存储在静态存储区中(静态存储区大小理论上可达到4GB),或使用动态内存分配。