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

如题,在写一些程序的时候我们有时会开一个比较大的数组或进行层数较多的dfs。这时候,程序常常会报错,于是就很无奈。

其实,虽然Windows给程序的默认栈空间比较小,我们还是有办法去扩大这个程序运行栈空间的。

栈空间限制在何处?

对于 Linux,在系统设置(本文不做讨论,后续可能会补坑)

对于 Windows,在 ".exe" 可执行文件中。

Windows + g++ 扩大程序可用栈空间 方法

简单来说,就是在编译的时候加入一条形如 -Wl,--stack=SIZE 的指令即可。

SIZE 的单位:byte

例如,我要进行单文件编译,文件名为 a.cpp,给予该可执行文件最大 256MB的栈空间。

指令:

g++ a.cpp -o a.exe -Wl,--stack=268435456

\(※ \space 268435456 =256 \times 1024 \times 1024\)

IDE 说明

一般在IDE中,都会有一个设置页面叫做“编译选项”,在这里加入一句 -Wl,--stack=SIZE 即可

Bloodshed DEV-C++ 5.11 开大栈空间教程

上方工具栏 \(\rightarrow\) 工具[T] \(\rightarrow\) 编译选项[C] \(\rightarrow\) 勾选“编译时加入以下命令”并加入一句 -Wl,--stack=SIZE \(\rightarrow\) 点击下方“确定[O]”即可

信息学竞赛党(OIer,ACMer)福利

个人再平时训练中会在编译器加入的一句话是:

-O2 -Wall -Wextra -Wl,--stack=536870912

意思:

  1. 打开O2优化 (-O2)
  2. 打开“显示最多警告信息” (-Wall)
  3. 开大栈空间限制到 512MB (-Wl,--stack=536870912)

原文地址:https://www.cnblogs.com/hkxadpall/p/10401000.html

时间: 2024-11-12 14:26:07

使用g++编译器扩大程序可用栈空间的相关文章

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

设置c++程序的堆栈空间解决栈溢出问题 程序的静态数据量大的时候,有时候会出现栈溢出问题,往往是程序还没运行算法呢,就down掉了,比如你在创建包含大数组的类(或数据)的时候,栈就溢出了.这是由于系统分配给程序的栈空间太小. 一种方法,就是不要静态分配,用new动态创建,是从堆中分配的,堆的空间足够大,不过记得写析构函数,delete你申请的堆空间.其实这样也挺方便,类结束的时候会自动调用析构函数释放空间.养成"不在栈上定义大数组/大对象"的好习惯很重要,否则再大的栈也会被撑爆的. 当

Linux运行c++程序gcc编译器和g++编译器的区别

gcc编译器和g++编译器在编译时都要经过这三个步骤:1.预处理生成.i文件 2.预处理后转换为汇编生成.s文件 3.汇编转化为机器码生成可执行的.o文件 4.连接生成可执行文件 但是在gcc编译器中,是不能直接连接c++库的,所以在链接过程中会出错,只要在链接命令后面加上一个"-lstdc++"即可实现.. gcc和g++都可以编译c和c++代码,.c文件g++会把其当做c++文件,而.cpp文件,两者都会识别为c++文件,编译阶段g++会调用gcc.但是gcc不能和c++程序的库相

你必须知道的指针基础-8.栈空间与堆空间

一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈. 2.堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表. 3.全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻

C程序的内存空间

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

内存泄露会导致程序可用内存耗尽,然后崩溃

以前虽内存泄漏不以为然,因为在几个G内存的电脑上,忘了delete一个对象,能占多大点内存啊? 结果这次出问题了,我的程序彻夜运算,每次执行10遍任务后,程序就会崩溃,一开始根据打印的日志,还以为是自己没有正确载入图片,并且还怀疑到回调函数/刷新函数/锁机制/多线程同步等等,全都怀疑上了.后来发现一个特点,每次程序崩溃的时候,所占用的内存都是1.47G,而且执行任务期间使用的内存稳定增长,从不下降,这才有了初步的认识,原来是内存泄漏搞的鬼(虽然到现在都没有具体找到哪段代码产生的内存泄漏).还有单

Linux环境下GNU, GCC, G++编译器

一,GNU GNU是"GNU 's Not Unix"的递归缩写, Stallman宣布GNU应当发音为Guh-NOO(革奴)以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new相同) 为保证GNU软件可以自由地"使用.复制.修改和发布",所有GNU软件都在一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL).这个就是被称为"反版权&q

Linux之gcc与g++编译器

1.gcc编译器 gcc编译器开发初期定位为C编译器(GNU C Compiler),但随着时间的发展gcc编译器能够支持多种语言. 1.1 gcc编译器的使用 假如我们已经有了.c文件名称为Hello.c,可以使用下面的语句编译该文件: $ gcc Hello.c 该语句执行成功后,会在当前目录下生成可执行文件名称为a.out(默认),我们可以使用下面的语句来运行该可执行文件: $ ./a.out 当然我们不想使用默认的名称,这样不够直观,我们可以在使用gcc进行编译时指定其可执行文件名: $

Linux栈空间检测代码

今天终于知道linux栈空间了.因为写了个简单程序,可以让linux的栈空间耗尽,然后出现core dumped,即栈溢出 代码如下: #include <stdio.h> void overFlow() { long i; printf("&i  : %p\n",&i); overFlow(); } int main() { OverFlow(); } 运行程序 ./out > out.log 栈地址是从高到低,所以用第一个减去最后一个地址,就能得到

栈空间溢出

前言 嵌入式工程师们免不了和堆栈打交道,深入理解了这两个东西,才能从代码编写时就考虑清楚内存管理,避免到后期出现各种莫名其妙的问题. 最近在使用CC2530时也遇到了一些问题,怀疑跟栈空间溢出有关,于是做了一次梳理.可能有些理解还不到位,等了解了再修正. 本文是以CC2530为例做了测试,我们可以借鉴到其他单片机上. 所谓栈空间,就是一块内存空间.而溢出,就是使用的内存区域超过了这块空间.占用栈空间的是局部变量. TI的FAE说CC2530的栈空间大小为223字节左右,最好不要超出.我实际测试,