博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
申请超大内存时提示 “ Stack Over ” 错误(stack over, big memory)
阅读量:6830 次
发布时间:2019-06-26

本文共 873 字,大约阅读时间需要 2 分钟。

hot3.png

下面的源码文件运行时会提示错误:

struct ShareMemoryMessage{	int id;	char data[50 * 1024 * 1024];};int main(){	ShareMemoryMessage msg = { 0 };	getchar();    return 0;}

125312_uLC7_3489228.png

提示堆栈内存溢出!

这是因为默认的堆栈内存只有1M,而定义的ShareMemoryMessage结构体使用了大于50M的内存,显然已经远远超出了默认的堆栈内存。解决的方法有三个:

1、将结构体定义到main()函数之外,比如全局变量:

struct ShareMemoryMessage{	int id;	char data[50 * 1024 * 1024];};ShareMemoryMessage msg = { 0 };int main(){	memset(&msg, 0, 1024);	getchar();    return 0;}

这样一来该内存就会在main()函数之前在静态内存区域申请,而不会在堆栈中申请,1M的堆栈内存限制大小对它就不起作用啦!

2、将结构体由申请堆栈内存改为申请动态内存:

struct ShareMemoryMessage{	int id;	char data[50 * 1024 * 1024];};int main(){	ShareMemoryMessage* msg = new ShareMemoryMessage;	memset(msg, 0, 1024);	getchar();    return 0;}

这样的话结构体会申请动态堆内存,而不会在main()函数所在的主线程去申请堆栈内存!

3、修改程序默认的堆栈大小:

133529_NPC7_3489228.png

以上是VS2015项目属性上设置堆栈内存的位置,需要注意的是,如果结构体需要的是50M的内存,堆栈内存必须要比这个值大至少1M左右,上图实际设置的堆栈内存为60M。

转载于:https://my.oschina.net/u/3489228/blog/1825883

你可能感兴趣的文章
leetcode 回文链表 java版本
查看>>
UEFI 模式下如何安装 Ubuntu 16.04
查看>>
OSChina 周一乱弹 ——新娘着火,拿红酒灭火的肯定是新郎前女友
查看>>
Python变量
查看>>
form表单ajax传数据问题
查看>>
linux虚拟化KVM(二)
查看>>
怎么用OCR文字识别软件创建属于自己的PDF
查看>>
spring 配置资源路径时候,classpath:/,classpath:,不带前缀的区别
查看>>
Java基础教程,第一讲,图解如何快速搭建自己的Java开发环境
查看>>
怎样设计一个安全的验证码--从验证码识别技术原理说起
查看>>
make clean与make distclean的区别
查看>>
我的友情链接
查看>>
C#获取文件CRC32值 (对应JAVA生成文件的CRC32值)
查看>>
Linux常用进程管理工具的使用--我的学习记录
查看>>
iOS开发之同一应用多环境配置
查看>>
网上找的一个现成的jquery图片切换效果
查看>>
一个简单的脚本,实现自动执行MITM***(更新0.2)
查看>>
数据结构学习笔记1
查看>>
LVS DR模式负载均衡配置详解(配置篇一)
查看>>
我的友情链接
查看>>