最近给一个程序添加小功能,在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. winSockets编程(二)socket函数
  2. 求n!中含有某个因子个数的方法
  3. IntelliJ IDEA - 热部署插件JRebel 安装使用教程
  4. OkHttp3中的HTTP/2首部压缩
  5. 第10课:动手实战基于 CNN 的电影推荐系统
  6. Swift 中的设计模式 #3 外观模式与适配器模式
  7. Recursive sequence HDU - 5950
  8. 多窗口售票:单件模式多线程实现
  9. mysql查看防火墙状态命令,centos 7中firewall防火墙的常用命令总结
  10. 关闭window 8.1 的skydrive
  11. 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)
  12. 【游戏引擎Easy2D】第一个引擎程序
  13. 猿辅导(实习800/天)面试算法题详解
  14. Jquery消息提示插件toastr的使用
  15. 控制寄存器 cr0,cr2,cr3
  16. 手把手教你Web数据可视化平台搭建
  17. iPhoneiPad越狱后的操作
  18. Layui 数据表格合并单元格
  19. 冯扬文:新冠疫情下国际航运市场趋势分析
  20. python 旧照片_DeOldify黑白旧照片着色神器:基于NoGAN的深度学习来实现旧照着色还原...

热门文章

  1. 剑指_3.2不修改数组找出重复的数字(Python)
  2. com.netflix.zuul.exception.ZuulException: Forwarding error
  3. sever2008 ad用户和计算机不见,windows-server-2008 – 当我使用Powershell将用户添加到安全组时,它们不会显示在AD中...
  4. xampp错误: mysql 非正常关闭._mysql数据库DBA实用技巧--为你的数据库开启Innodb监控...
  5. java代码怎么动态修改xml配置文件内容_[MyBatis]-MyBatis框架-05-动态sql
  6. @value取不到值_Bamboo window上环境变量 HOMEDRIVE 及 HOMEPATH 获取不到的问题
  7. 计算机与科学 研究生考试内容,计算机科学与技术考研考哪些科目 备考技巧有哪些...
  8. php元素排序算法,php 4大基础排序算法
  9. ajax ----进度条的原理
  10. 面向对象语言-反射机制