Windows下如何改变栈空间大小

菜鸡的逆袭之路 2017-03-15 01:35:13
如题,本人C++新手,最近在学习算法,经常会用到大数组,一旦数据规模超过50W栈空间就会不足,程序就会挂掉。我在网上查了资料,说linux的栈空间大小由系统变量决定,windows下栈空间大小存放在可执行文件当中,由编译器决定。本人使用的IDE是Clion,求问老司机怎么做可以实现设置栈空间?
BTW,做开发一般都用Linux或者Mac来完成吗?
...全文
1972 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-03-16
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。 容量大小从小到大:栈≤全局数据≤堆≤文件≤硬盘≤磁盘阵列≤云存储 当程序需要使用比如2GB~1TB左右的存储时,最简单的办法恐怕得是用文件读写模拟内存读写了吧。windows参考_fseeki64函数,linux参考fseeko64函数。
FILE *fA;fA=fopen("A","rb+");_fseeki64(fA,10000000000i64*sizeof(int),SEEK_SET);fputc(fA,0);//int A[10000000000];
int B;
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fread(&B,1,sizeof(int),fA);//B=A[9999999999];
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fwrite(&B,1,sizeof(int),fA);//A[9999999999]=B;
fclose(fA);
zilaishuichina 2017-03-15
  • 打赏
  • 举报
回复
什么样的需求导致一定要在栈上分配大数组呢,你让堆情何以堪
ztenv 版主 2017-03-15
  • 打赏
  • 举报
回复
在堆上分析吧,栈上的空间总是有限的。
paschen 版主 2017-03-15
  • 打赏
  • 举报
回复
VC6.0中修改堆栈大小的方法: 1). 选择 "Project->Setting". 2). 选择 "Link". 3. 选择 "Category"中的 "Output". 4. 在 "Stack allocations"中的"Reserve:"中输栈的大小 在VS中设置堆栈大小的方法为: 1). 选择 "项目->属性". 2). 选择 "链接器". 3. 选择 "系统". 4. 在 "堆栈保留大小"中输栈的大小 此外,仍建议数组太大应在堆上动态分配内存
vnvlyp 2017-03-15
  • 打赏
  • 举报
回复
哦你用的Clion。。这个就不清楚了,没用过这个IDE。 你可以看下他带的链接器的选项
vnvlyp 2017-03-15
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/en-us/library/8cxs58a6.aspx Windows下如果用的VS可以在设置里指定Stack Reserve大小,默认是1MB,你可以调高一点。 如果你用CreateThread等方法,其中有一个参数也是栈大小。
赵4老师 2017-03-15
  • 打赏
  • 举报
回复 1
editbin.exe /stack:100000000 xxx.exe

65,196

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧