一.栈的简介
栈空间在进程中主要用来存放局部变量的值,在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个字节。此方法不推荐,因为可能会有更大字节的局部变量。
附:在CMakeLists.txt中这样设置:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000")
2.将char szArray[]改为static,亦可避免崩溃,因为静态的局部变量类似于全局变量,在全局区。
3.将szArray new出来存在堆上,推荐此种方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。