VS 内存不能read—堆栈空间解决栈溢出问题
最近给一个程序添加小功能,在debug下能正常运行,在release下就出现内存不能read,很是费解。但调试跟踪后找到程序出错的地方,问题出现在对话框创建的过程中ChannelcfgDlg.Create(IDD_SUB_DLG_CHAN_CFG,&m_settingTab);后来在网上搜索一些资料,发现程序的静态数据量大的时候,有时候会出现栈溢出问题,往往是程序还没运行算法呢,就down掉了,在反观程序中这个对话框类中确实定义了大量的数组。http://wuliang20080412.blog.163.com/blog/static/905220552010320018881/
比如你在创建包含大数组的类(或数据)的时候,栈就溢出了。这是由于系统分配给程序的栈空间太小。
一种方法,就是不要静态分配,用new动态创建,是从堆中分配的,堆的空间足够大,不过记得写析构函数,delete你申请的堆空间。其实这样也挺方便,类结束的时候会自动调用析构函数释放空间。养成"不在栈上定义大数组/大对象"的好习惯很重要,否则再大的栈也会被撑爆的。
当然,如果你不喜欢new,delete的话,还是静态分配(毕竟静态分配有很多好处),那么可以通过改变默认栈空间来解决。
LINK的/STACK选项
/STACK :reserve[,commit]
reserve:栈总大小
commit:程序开始时系统提供的实际内存量
缺省:1M,8K
参数为0取缺省值
今天在VC++.NET中运行聚类程序,老是说Stack OverFlow, 后来才发现是栈空间太小了。
单单保存100个网页的数据量就比较大了。
把堆栈的大小已经设置为:
堆栈保留大小为:100000000;
堆栈提交大小为: 100000000;
就没问题了。
VS修改:
在 Visual Studio 开发环境中设置此链接器选项
打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。
单击“链接器”文件夹。
单击“系统”属性页。
修改下列任一属性:
堆栈提交大小
堆栈保留大小
问题解答:
方法一:STACKSIZE 定义.def文件
语法:STACKSIZE reserve[,commit]
reserve:栈的大小;commit:可选项,与操作系统有关,在NT上只一次分配物理内存的大小
方法二:设定/STACK
VC6.0修改:
打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后
在Reserve中设定堆栈的最大值和commit。
注意:reserve默认值为1MB,最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较
大会使栈开辟较大的值,可能增加内存的开销和启动时间
VS 内存不能read—堆栈空间解决栈溢出问题相关推荐
- 设置c++程序的堆栈空间解决栈溢出问题
设置c++程序的堆栈空间解决栈溢出问题 程序的静态数据量大的时候,有时候会出现栈溢出问题,往往是程序还没运行算法呢,就down掉了,比如你在创建包含大数组的类(或数据)的时候,栈就溢出了.这是由于系统 ...
- Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题 参考文章: (1)Visual Stdio VS 错误 err ...
- java栈堆溢出怎么解决_java内存溢出示例(堆溢出、栈溢出)
堆溢出:/** * @author LXA * 堆溢出 */ public class Heap { public static void main(String[] args) { ArrayLis ...
- malloc函数分配内存失败的原因及解决方法
原文链接:http://blog.csdn.net/lighthear/article/details/70146602 malloc函数分配内存失败的原因及解决方法 先说结论 malloc()函数分 ...
- Fortran的堆栈溢出解决方法
Fortran的堆栈溢出解决方法 每个线程都有自己的堆栈用来保存局部变量和函数调用信息,根据编译器不同,通常大小1~4MB之间,如果用完了就会出现stack overflow exception.此外 ...
- STM32堆栈空间大小设置
1. 设置堆栈空间大小 在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小.如下图所示的启动代码中,Stack栈的大小为: ...
- java内存溢出原因及解决_java内存溢出的原因和解决方法
java内存溢出的原因和解决方法 发布时间:2020-06-15 17:57:39 来源:亿速云 阅读:85 作者:元一 内存溢出含义: 内存溢出(out of memory)通俗理解就是内存不够,通 ...
- C语言内存使用的常见问题及解决之道
一 前言 本文所讨论的"内存"主要指(静态)数据区.堆区和栈区空间(详细的布局和描述参考<Linux虚拟地址空间布局>一文).数据区内存在程序编译时分配,该内存的生存 ...
- linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...
转自:http://blog.csdn.net/gongweijiao/article/details/8207333 原文参见:http://blog.163.com/xychenbaihu@yea ...
- linux进程与它的堆栈空间
一)概述 .堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储. .堆栈中存放的是函数中的局部变量,在函数的生命周期中可以将变量压入堆栈,编译器需要确保堆栈指针在函数退出前恢复到初始位置,也就是说 ...
最新文章
- 信息理论基础 周炯槃 常迥
- 微信小程序--搭建linux服务器并部署java后端程序2021
- window的onresize执行多次的解决方法
- 二、ceph编译源码、单机搭建调试环境
- 从Ant Build演进Gradle Build:导入Ant Build文件
- SQL Cookbook:二、查询结果排序(1)以指定的次序返回查询结果
- Tomcat学习笔记(一)
- latex安装包_Latex安装包及模版教程!数学专业必备!美赛神器!
- python writelines_Python之write与writelines区别
- flask-bootstrap插件
- 测试上路2年,你处于什么阶段了?不醒着拼,你连应届生都比不过...
- 16QAM调制的仿真及其Python实现的代码(超级详细)
- 2017百度之星资格赛题解(1003、1004)
- Odin Inspector 系列教程 --- 初识Odin序列化
- vyos in or out 限流量
- trans系列是sci几区_怎么确定SCI论文期刊是几区的?
- FYI | 谷歌的summer project围观一下
- 肯德尔系数怎么分析_SPSS统计案例笔记16:相关分析之kendall系数
- 美国FICO评分系统简介
- 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍
热门文章
- QT编译静态库与动态库
- 计算机系统结构概念,计算机系统结构的基本概念
- easypoi 导入错误返回流_金九银十面试准备季:异常+IO与NIO流
- git分支详细讲解,模拟分支开发,为什么使用分支开发
- 计算机与科学 研究生考试内容,计算机科学与技术考研考哪些科目 备考技巧有哪些...
- js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)
- web文件服务器1台,WEB服务器及配件1台 - 千里马招标网
- C# 操作mysql-创建表、插入更新数据
- 【转】el-table复选框分页记忆-非:reserve-selection=true模式
- vue前端项目打包并且在服务器上部署过程