最近给一个程序添加小功能,在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 开发环境中设置此链接器选项
  1. 打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。

  2. 单击“链接器”文件夹。

  3. 单击“系统”属性页。

  4. 修改下列任一属性:

    • 堆栈提交大小

    • 堆栈保留大小

问题解答:

方法一:STACKSIZE   定义.def文件

语法:STACKSIZE reserve[,commit]
     reserve:栈的大小;commit:可选项,与操作系统有关,在NT上只一次分配物理内存的大小

方法二:设定/STACK 
     VC6.0修改:
     打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后
在Reserve中设定堆栈的最大值和commit。

注意:reserve默认值为1MB,最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较
大会使栈开辟较大的值,可能增加内存的开销和启动时间

VS 内存不能read—堆栈空间解决栈溢出问题相关推荐

  1. 设置c++程序的堆栈空间解决栈溢出问题

    设置c++程序的堆栈空间解决栈溢出问题 程序的静态数据量大的时候,有时候会出现栈溢出问题,往往是程序还没运行算法呢,就down掉了,比如你在创建包含大数组的类(或数据)的时候,栈就溢出了.这是由于系统 ...

  2. Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题

    Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题 参考文章: (1)Visual Stdio VS 错误 err ...

  3. java栈堆溢出怎么解决_java内存溢出示例(堆溢出、栈溢出)

    堆溢出:/** * @author LXA * 堆溢出 */ public class Heap { public static void main(String[] args) { ArrayLis ...

  4. malloc函数分配内存失败的原因及解决方法

    原文链接:http://blog.csdn.net/lighthear/article/details/70146602 malloc函数分配内存失败的原因及解决方法 先说结论 malloc()函数分 ...

  5. Fortran的堆栈溢出解决方法

    Fortran的堆栈溢出解决方法 每个线程都有自己的堆栈用来保存局部变量和函数调用信息,根据编译器不同,通常大小1~4MB之间,如果用完了就会出现stack overflow exception.此外 ...

  6. STM32堆栈空间大小设置

    1. 设置堆栈空间大小 在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小.如下图所示的启动代码中,Stack栈的大小为: ...

  7. java内存溢出原因及解决_java内存溢出的原因和解决方法

    java内存溢出的原因和解决方法 发布时间:2020-06-15 17:57:39 来源:亿速云 阅读:85 作者:元一 内存溢出含义: 内存溢出(out of memory)通俗理解就是内存不够,通 ...

  8. C语言内存使用的常见问题及解决之道

    一  前言 本文所讨论的"内存"主要指(静态)数据区.堆区和栈区空间(详细的布局和描述参考<Linux虚拟地址空间布局>一文).数据区内存在程序编译时分配,该内存的生存 ...

  9. linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...

    转自:http://blog.csdn.net/gongweijiao/article/details/8207333 原文参见:http://blog.163.com/xychenbaihu@yea ...

  10. linux进程与它的堆栈空间

    一)概述 .堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储. .堆栈中存放的是函数中的局部变量,在函数的生命周期中可以将变量压入堆栈,编译器需要确保堆栈指针在函数退出前恢复到初始位置,也就是说 ...

最新文章

  1. 信息理论基础 周炯槃 常迥
  2. 微信小程序--搭建linux服务器并部署java后端程序2021
  3. window的onresize执行多次的解决方法
  4. 二、ceph编译源码、单机搭建调试环境
  5. 从Ant Build演进Gradle Build:导入Ant Build文件
  6. SQL Cookbook:二、查询结果排序(1)以指定的次序返回查询结果
  7. Tomcat学习笔记(一)
  8. latex安装包_Latex安装包及模版教程!数学专业必备!美赛神器!
  9. python writelines_Python之write与writelines区别
  10. flask-bootstrap插件
  11. 测试上路2年,你处于什么阶段了?不醒着拼,你连应届生都比不过...
  12. 16QAM调制的仿真及其Python实现的代码(超级详细)
  13. 2017百度之星资格赛题解(1003、1004)
  14. Odin Inspector 系列教程 --- 初识Odin序列化
  15. vyos in or out 限流量
  16. trans系列是sci几区_怎么确定SCI论文期刊是几区的?
  17. FYI | 谷歌的summer project围观一下
  18. 肯德尔系数怎么分析_SPSS统计案例笔记16:相关分析之kendall系数
  19. 美国FICO评分系统简介
  20. 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍

热门文章

  1. QT编译静态库与动态库
  2. 计算机系统结构概念,计算机系统结构的基本概念
  3. easypoi 导入错误返回流_金九银十面试准备季:异常+IO与NIO流
  4. git分支详细讲解,模拟分支开发,为什么使用分支开发
  5. 计算机与科学 研究生考试内容,计算机科学与技术考研考哪些科目 备考技巧有哪些...
  6. js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)
  7. web文件服务器1台,WEB服务器及配件1台 - 千里马招标网
  8. C# 操作mysql-创建表、插入更新数据
  9. 【转】el-table复选框分页记忆-非:reserve-selection=true模式
  10. vue前端项目打包并且在服务器上部署过程