栈空间太大超过工程设定值引发的进程崩溃

一.栈的简介

栈空间在进程中主要用来存放局部变量的值,在windows下使用visual studio作为编译器,默认的栈空间大小为1M。
二.示例代码
#include <iostream>
void teststacksize2()
{
char szArray[600000] = {0};//600,000byte
std::cout<<“teststacksize2″<<std::endl;
}
void teststacksize1()
{
char szArray[600000] = {0};//600,000byte
std::cout<<“teststacksize1″<<std::endl;
teststacksize2();
}
int main(int argc, char* argv[])
{
teststacksize1();
return 0;
}

三.程序运行效果如图

四.解决此问题的方法
1.修改工程中stack reserve size的大小,工程右键Properties->Linker->System->Stack Reserve Size中进行修改,改为10M或者更大。此示例程序中teststacksize1和teststacksize2方法中一共申请了1,200,000个字节。此方法不推荐,因为可能会有更大字节的局部变量。
2.将char szArray[]改为stack,亦可避免崩溃,因为静态的局部变量类似于全局变量,在全局区。
3.将szArray new出来存在在堆上,推荐此种方法。