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

时间: 2024-11-10 07:04:18

设置c++程序的堆栈空间解决栈溢出问题的相关文章

C程序的内存空间

一个C程序在内存空间里面主要包括以下几个部分:1,代码段2,数据段3,栈4,堆 代码访问代码段,数据段放静态和全局变量,函数参数和局部变量放在堆栈里面,堆里面存是malloc分配的区域   堆栈里面是一个栈的结构,往里push东西的时候就小的数据就是向整形,浮点型这类基本的数据.但是stack有一个更大的单位,那就是stack frame,一个函数通常对应一个stack frame,在stack frame里面存放的依次是进入函数后执行的第一条指令地址,参数(一般是从右往左压入参数),局部变量.

使用g++编译器扩大程序可用栈空间

如题,在写一些程序的时候我们有时会开一个比较大的数组或进行层数较多的dfs.这时候,程序常常会报错,于是就很无奈. 其实,虽然Windows给程序的默认栈空间比较小,我们还是有办法去扩大这个程序运行栈空间的. 栈空间限制在何处? 对于 Linux,在系统设置(本文不做讨论,后续可能会补坑) 对于 Windows,在 ".exe" 可执行文件中. Windows + g++ 扩大程序可用栈空间 方法 简单来说,就是在编译的时候加入一条形如 -Wl,--stack=SIZE 的指令即可.

设置UWP程序自启动(Automate launching Windows 10 UWP apps)

原文:设置UWP程序自启动(Automate launching Windows 10 UWP apps) 在开发UWP程序的过程中,有时候需要设置程序的自启.本人实现的步骤如下: 1.在VS中激活Protocol (Package.appxmanifest --> Declarations --> Add Protocol),图示如下: 2.编译并发布项目(Build and Deploy) 发布之后Protocol被激活,在(控制面板 --> 程序 --> 默认程序 -->

设置Qt程序在Windows开机后自动运行

(转自:http://blog.csdn.net/weiren2006/article/details/7443362) 让软件在系统启动时自动运行,可通过修改注册表实现. 在\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加需启动的程序路径,代码如下: voidautoStart(boolflag){//写入注册表,开机自启动HKEYhKey;//找到系统的启动项LPCTSTRlpRun=(wchar_t*)

安装vmware虚拟机时出现“安装程序无法继续。Microsoft Runtime DLL 安装程序未能完成安装”解决

安装VMware出现以下问题: 界面显示: 安装程序无法继续.Microsoft  Runtime DLL 安装程序未能完成安装 解决方法: 按 系统键+r 输入:%temp%  找到 以~setup 结尾的目录,打开安装即可.

'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决办法

前言: 本文的解决方法来自http://www.cnblogs.com/xionghui/archive/2012/04/11/2442404.html --感谢! 问题描述:新电脑装mysql后在cmd面板输入:mysql -uroot -p ,出现:'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件. 原因:没有配置环境变量! 解决方法:配置环境变量 在Path中加入mysql的安装目录下的bin目录 OK! 再次打开cmd: 后记:如有类似问题直接打开本文的感谢网址即可.

golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法

golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法,查询中报了以下这个错 Scan error on column index 2: unsupported Scan, storing driver.Value type <nil> 解决方案就是动态的把数据 字段前加一上一个COALESCE SELECT u.id,ta.`title` as `活动名` ,COALESCE(IFNULL(i.name,i.nickname) F

程序猿是如何解决SQLServer占CPU100%的

原文:程序猿是如何解决SQLServer占CPU100%的 文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 有哪些SQL语句会导致CPU过高? 查看SQL的查询计划 选择top记录时,尽量为order子句的字段建立索引 查看SQL语句CPU高的语句 通过建立相关索引来减少表扫描 其他优化手段 总结 遇到的问题 有同事反应服务器CPU过高,一看截图基本都是100%了,my god,这可是大问题,赶紧先看

关于URLRewriter报错:System.NullReferenceException: 未将对象引用设置到对象的实例 的解决

检查网站日期,发现内容如下:System.NullReferenceException: 未将对象引用设置到对象的实例. 在 URLRewriter.ModuleRewriter.Rewrite(String requestedPath, HttpApplication app) 在 URLRewriter.BaseModuleRewriter.BaseModuleRewriter_AuthorizeRequest(Object sender, EventArgs e) 在 System.Web