免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2819 | 回复: 3
打印 上一主题 下一主题

[C++] [结贴]32位进程,栈的大小是编译选项决定的,还是内核配置的? [复制链接]

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-17 10:00 |只看该作者 |倒序浏览
本帖最后由 sentto2 于 2015-04-28 16:48 编辑

如题,进程栈的大小是被什么因素决定的?

同时我想问一下,进程堆的大小可以是好几G,为什么栈大小通常说只有十几兆? 都是虚拟地址空间中的一段范围,而且栈还是从高地址开始的。
如果说栈有大小限制是为了支持pthread多线程,那么在没有pthread的年代,栈大小是不是就没有限制呢? 如果有限制的话,这个限制的意义在哪里,堆大小没有限制啊

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2015-04-17 10:49 |只看该作者
ulimit

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
3 [报告]
发表于 2015-04-17 12:32 |只看该作者
栈和堆的大小都是有限制的。只是堆在溢出之前可以增长得更大。它们有限制的原因是进程空间里除了栈和堆外还有其他区域,比例动态链接库加载的区域之类的,栈和堆增长到其他区域的时候就不行了。用ulimit来限定用户可使用的堆栈大小这是另一回事了。

论坛徽章:
1
摩羯座
日期:2013-11-29 18:02:31
4 [报告]
发表于 2015-04-28 10:57 |只看该作者
无论是Linux还是Windows,进程中堆和栈的大小都是有限定的,因为这关系到进程资源分配的问题。除了堆和栈,进程还有其它资源要占用,所以要为各个资源分配合理的空间大小,比如共享库要占用相当一部分资源。

堆和栈是相对着生长的,为什么?很简单,可以将二者的总量设置一定,相对生长,也就是共同向中间位置生长,就看谁长得快了。谁长得快,谁用得资源多。

这个和早期资源比较紧张的历史环境有关。

另外,堆栈大小是一定的,这是在编译器中配置的,在编译出来的文件,Windows的EXE或Linux的ELF中都有相应的设置。可以修改,一般是在链接脚本中修改的。也可以直接修改EXE或ELF文件来改变默认大小。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP