免费注册 查看新帖 |

Chinaunix

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

进程线程栈空间? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-02 11:18 |只看该作者 |倒序浏览
我创建了一个进程,然后,用这个进程创建2000个线程做测试。为什么coredump 了?我用ulimit -s 2048 设置了一下栈 然后就好了。我不明白 进程的栈空间和线程的栈空间有什么区别嘛?线程的栈空间是从进程里面分配出来的嘛?他们各自最大的栈空间能分配多少?内核是怎么实现的?

论坛徽章:
0
2 [报告]
发表于 2008-06-02 12:40 |只看该作者
你的线程堆栈来自malloc类似的东西,所有线程共享地址空间,所以3G的空间不够那么多线程用

论坛徽章:
0
3 [报告]
发表于 2008-06-02 12:56 |只看该作者
栈空间有内核栈和用户栈之分,内核栈固定为8K(intel),用户栈不定,可以自由浮动。

根据linux的实现原理,主线程的用户栈地址固定,子线程的栈自设

论坛徽章:
0
4 [报告]
发表于 2008-06-02 14:23 |只看该作者

回复 #1 lib_net 的帖子

1,那也就是说,线程个数×栈空间大小 <3G?
2,线程并不是和进程共享栈空间的对嘛?有可能进程的栈空间会小于线程栈空间?

论坛徽章:
0
5 [报告]
发表于 2008-06-03 09:28 |只看该作者
栈没有进程栈和线程栈的区别,就是一个执行流的栈,线程之间又要共享3G的空间,而线程库在create一个线程时需要分配一个栈,它从3G中来,有个默认值,比如8M,那么300多个线程之后就没有地址可分配了,应该可以更改默认的栈大小

论坛徽章:
0
6 [报告]
发表于 2008-06-08 13:09 |只看该作者

回复 #1 lib_net 的帖子

Linux中的pthread的线程默认栈大小为8M,可以自己在程序中进行修改。

论坛徽章:
0
7 [报告]
发表于 2012-05-01 00:12 |只看该作者
最近碰到一个栈空间相关的问题。学习了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP