如题,在写一些程序的时候我们有时会开一个比较大的数组或进行层数较多的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)

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

  1. Linux Debugging(一): 使用反汇编理解C++程序函数调用栈

    拿到CoreDump后,如果看到的地址都是????,那么基本上可以确定,程序的栈被破坏掉了.GDB也是使用函数的调用栈去还原"事故现场"的.因此理解函数调用栈,是使用GDB进行现场 ...

  2. 20深入理解C指针之---程序的栈和堆

    一.程序在内存中的存储分段: 程序段主要包括:code段.data段.内核段.堆段和栈段 1.code段: 1).存储程序汇编后程序指令 2).此段中的数据是只读的 3).不能用于存储变量,可以存储常 ...

  3. 《浏览器工作原理与实践》 <12>栈空间和堆空间:数据是如何存储的?

    对于前端开发者来说,JavaScript 的内存机制是一个不被经常提及的概念 ,因此很容易被忽视.特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道 JavaSc ...

  4. Leetcode Lect3 内存中的栈空间与堆空间

    内存中的栈空间与堆空间 我们通常所说的内存空间,包含了两个部分:栈空间(Stack space)和堆空间(Heap space) 当一个程序在执行的时候,操作系统为了让进程可以使用一些固定的不被其他进 ...

  5. 更改Linux默认栈空间的大小

    有时候在Linux写C++程序处理大量的数据,程序内部需要分配很大的数组来存放一些数据,但有时候分配的数组太大的话运行时会出现段错误.这种情况可能是分配的数组大小超过了Linux系统的默认栈空间的大小 ...

  6. 《Cortex-M0权威指南》之体系结构---栈空间操作

    转载请注明来源:cuixiaolei的技术博客 栈空间作为一种存储器使用机制,是"先入先出"的结构,在系统空间中用作临时数据的存储.栈空间操作的关键之一为栈指针寄存器,每次执行栈操 ...

  7. Linux学习笔记4——函数调用栈空间的分配与释放

    一.函数执行时使用栈空间作为自己的临时栈,3种方式决定编译器清空栈的方式:__stdcall. __fastcall.__cdecl 1.__stdcall表示每个调用者负责清空自己调用的函数的临时栈 ...

  8. 无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。

    无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满.请删除不需要的文件.删除文件组中的对象.将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘 ...

  9. java虚拟机 jvm 出入java栈 栈空间内存分配

    java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调用其实是通过java栈传递数据的. 数据结构中 ...

随机推荐

  1. virtualBox里Ubuntu设置静态IP

    1.先将网络设置为桥接模式 2.打开虚拟机,进入界面,点击编辑 3.设置IP,ipconfig/all查看物理机IP,虚拟机要与本机在同一网段 然后断开重新连接就可以上网了

  2. hdu 2527 Safe Or Unsafe (优先队列实现Huffman)

    Safe Or UnsafeTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  3. nyoj 241-字母统计 (python count)

    241-字母统计 内存限制:64MB 时间限制:3000ms 特判: No 通过数:12 提交数:14 难度:1 题目描述: 现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果 ...

  4. man 与 help

    man帮助文档被划分为节 序号 节号 说明 1 1 命令帮助信息 2 2 系统调用函数的帮助信息(内核提供的接口函数) 3 3 库函数帮助信息 4 4 设备文件帮助信息 5 5 配置文档帮助说明 6 ...

  5. opencv各种小例子

    图像腐蚀 #include <opencv2/highgui/highgui.hpp>//OpenCV highgui 模块头文件 ~ #include <opencv2/imgpr ...

  6. nginx配置路径问题

    编译了一个程序放在服务器上,通过nginx配置转发访问.例如在配置下图的地址 d:\wayne\nginxWeb\www: 发现无法正常运行,查看error.log发现是有问题的,当创建文件时,ngi ...

  7. 20191017-6alpha week 2/2 Scrum立会报告+燃尽图 05

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9802 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 ...

  8. MyBaits框架入门总结

    MBaits简介 联系方式:18873247271(微信同步) 廖先生 qq:1727292697 MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apach ...

  9. An end-to-end TextSpotter with Explicit Alignment and Attention

     An end-to-end TextSpotter with Explicit Alignment and Attention 论文下载:http://cn.arxiv.org/pdf/1803.0 ...

  10. 2019-9-10:渗透测试,基础学习,sql注入笔记

    sql注入1,万能密码,自己写的网站,找到登录窗口,必须和数据库交互,往里插入构造的恶意代码,最后可以直接登录进去,不需要账号和密码,输入的恶意代码成为万能密码,后端拼接的sql语句,SELECT * ...