zoukankan      html  css  js  c++  java
  • 程序运行栈空间不足程序崩溃问题

    设置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是保留在虚拟内存的页文件里面,它设置的较 大会使栈开辟较大的值,可能增加内存的开销和启动时间

    方法三:减少栈空间使用,在堆上分配空间。

  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/mingzhang/p/10709258.html
Copyright © 2011-2022 走看看