设置c++程序的堆栈空间解决栈溢出问题
设置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是保留在虚拟内存的页文件里面,它设置的较 大会使栈开辟较大的值,可能增加内存的开销和启动时间
转载于:https://www.cnblogs.com/leokie/p/4712655.html
设置c++程序的堆栈空间解决栈溢出问题相关推荐
- Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题 参考文章: (1)Visual Stdio VS 错误 err ...
- STM32堆栈空间大小设置
1. 设置堆栈空间大小 在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小.如下图所示的启动代码中,Stack栈的大小为: ...
- 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法
微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法 参考文章: (1)微信小程序首页index.js获取不到app.js中动态设置的globalDat ...
- 32. 脱壳篇-简单带壳的程序、反调试带壳的程序(堆栈平衡原理找OEP、代码段设置断点)
第一个程序 OEP为46B6F9 PE头位置为46B000到46D000区间,have a nice day! 就是壳 一定要点上箭头指向处,dump改名 清除区段 ,删除壳,保存 第二个程序(市面上 ...
- KEIL设置程序起始地址无效解决方法,STM32 IAP程序起始地址
关键词: KEIL设置程序起始地址无效解决方法 STM32 IAP设置程序起始地址 KEIL设置程序起始地址 MDK设置程序起始地址 KEIL设置ROM地址无效 碰到的问题:为了实现STM32升级固件 ...
- 怎样破坏程序的堆栈?
为什么使用堆栈? 现代计算机被设计成能够理解人们头脑中的高级语言. 在使用高级语言构造程序时最重要的技术是过程(procedure)和函数(function). 从这一点来看, 一个过程调用可以象跳 ...
- 如何设置RTOS任务的堆栈大小?
关注+星标公众号,不错过精彩内容 转自 | 麦克泰技术 基于RTOS的应用中,每个任务都拥有自己的堆栈空间.堆栈设置过大,会造成内存资源浪费:设置过小,可能导致运行过程中的任务栈溢出,从而导致一些奇怪 ...
- 计算机驱动空间不够,Win8.1系统如何释放驱动器空间解决可用空间不足问题
现在越来越多用户安装升级win8.1系统,在操作使用过程中难免遇到一些奇奇怪怪的问题.相信有很多win8.1系统用户会遇到电脑的可用空间不足的提示,用户感到很疑惑,自己的电脑又没装什么软件怎么会这么提 ...
- Fortran的堆栈溢出解决方法
Fortran的堆栈溢出解决方法 每个线程都有自己的堆栈用来保存局部变量和函数调用信息,根据编译器不同,通常大小1~4MB之间,如果用完了就会出现stack overflow exception.此外 ...
最新文章
- sap Status状态栏设计
- Java面试题2-附答案
- Python基础-map/reduce/filter
- oracle的oradata,Oracle使用oradata恢复数据库
- 后缀自动机SAM详解
- 桌面下雪软件测试工程师,Xsnow - 在Ubuntu 18.04及更高版本的桌面上下雪
- 计算机操作系统 第五版 答案,操作系统-第5版-习题答案.doc
- JFlash烧录不知名的ARM芯片
- npp夜光数据介绍 viirs_对 VIIRS/NPP 夜光数据的解读
- HHUOJ 1860 哆啦A梦的口袋
- Mat和IplImage转换
- 计算机硬盘被制成动态硬盘,win10系统基本磁盘转换成动态磁盘的处理办法
- 一个网络下,手机如何访问本地网址
- EKF SLAM学习笔记02
- Java web实时进度条整个系统共用(如java上传、下载进度条、导入、导出excel进度条等)...
- 大屏联屏发布系统解决方案
- 1018石头剪刀布(模拟)
- ViewFlipper用法
- 【心理咨询师考试笔记】操作技能(三)——咨询基本技能
- Paper系列的查重和知网维普的查重对比
热门文章
- cmder 神器 +curl
- Nginx自学手册(六)Nginx+Tomcat实现动静分离
- Windows Server 2008 R2无密码共享设置
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
- 互联网域名解析系统DNS的工作原理及相关服务配置
- Samba 3.4.0 发布
- 同一个项目的不同的项目工作经验总结--程序员丁
- 如何在程序中嵌入FOP
- js判断时间跨度,以月数为单位
- Tsinsen A1517. 动态树 树链剖分,线段树,子树操作