Stack Overflow Exception

语言:标准C++

IDE:vs2010  

操作:递归搜索栅格图像时出现StackOverflow异常,图像大小为7397×4248共个31422456个像元。

原因:程序运行时所进行的大量的递归调用所占堆栈超过了系统默认堆栈大小,引发栈溢出异常。

保留堆栈和提交堆栈,指定虚拟内存中的总的堆栈分配,单位为字节,仅在生成exe文件时使用。

保留堆栈:X86和X64的计算机默认保留堆栈大小为1MB,Itanium 芯片计算机为4MB;

提交堆栈:对于 x86 和 x64 计算机,默认提交值为 4 KB。 在 Itanium 芯片组上,默认值为 16 KB。代表一次分配的物理内存量。越大程序越快,占用内存也越多,可能启动也越慢。

解决:打开工程--属性--链接--系统--堆栈保留大小:修改到一个大于1M=1048576字节的数,我修改到了50000000,约为47.69MB,不再引发这个异常。

参考:http://msdn.microsoft.com/zh-cn/library/8cxs58a6.aspx

2011-11-05 11:25 

原文地址:https://www.cnblogs.com/yeahgis/p/2246337.html