设置c++程序的堆栈空间解决栈溢出问题
程序的静态数据量大的时候,有时候会出现栈溢出问题,往往是程序还没运行算法呢,就down掉了, 比如你在创建包含大数组的类(或数据)的时候,栈就溢出了。这是由于系统分配给程序的栈空间太小。
一种方法,就是不要静态分配,用new动态创建,是从堆中分配的,堆的空间足够大,不过记得写析构 函数,delete你申请的堆空间。其实这样也挺方便,类结束的时候会自动调用析构函数释放空间。养成”不在栈上定义大数组/大对象”的好习惯很重要,否 则再大的栈也会被撑爆的。
当然,如果你不喜欢new,delete的话,还是静态 分配(毕竟静态分配有很多好处),那么可以通过改变默认栈空间来解决。
LINK的/STACK选项
/STACK :reserve[,commit]
reserve:栈总大小
commit:程序开始时系统提供的实际内存量
缺省:1M,8K
参数为0取缺省值
今天在VC++.NET 中运行聚类程序,老是说Stack OverFlow, 后来才发现是栈空间太小了。
单单保存100个网页的数据量就比较大了。
把堆栈的大小已经设置 为:
堆栈保留大小为:100000000;
堆栈提交大小为: 100000000;
就没问题了。
设置:项目-> 属性-> 链接器-> system-> 堆栈保留大小/堆栈提交大小
问题解答:
方 法一:STACKSIZE 定义.def文件
语法:STACKSIZE reserve[,commit]
reserve:栈的大小;commit:可选项,与操作系统有关,在NT上只一次分配物理内存的大小
方法二:设定/STACK
打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后
在 Reserve中设定堆栈的最大值和commit。
注意:reserve默认值为1MB,最小值为4Byte;commit是保留在虚拟 内存的页文件里面,它设置的较
大会使栈开辟较大的值,可能增加内存的开销和启动时间
您可能还对这些文章感兴趣
最新Godaddy优惠码 2012年 - 长期更新
中国电信 中国移动 互联网 优惠码 博客 域名 广告 建站 微软 心情 战略 技巧 操作系统 新闻 游戏娱乐 电脑维修 病毒 百度 硬件相关 硬盘 站长评论 编程开发 网上调查 网站事务 网站技术 网络奇趣 网络赚钱 蜘蛛 计算机安全 软件 软件技巧 通信 通信产业 闲话杂谈 e godaddy Google 广告 IT Photo Shop seo vc windows7 Windows XP wordpress z-blog
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.


Recent Comments