免费注册 查看新帖 |

Chinaunix

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

Linux支持的默认用户栈大小是多少? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-01 10:05 |只看该作者 |倒序浏览
我记得几个星期前试过好像是32M左右……
但昨天用char a[1024*1024*1024]分配了1G的空间竟然编译运行都没
问题……

然后用
#ulimit -s
返回一个8192,不知所云……难道ulimit -s 返回内核栈的大小?

论坛徽章:
0
2 [报告]
发表于 2008-04-01 10:54 |只看该作者
用户空间的堆栈当发生缺页异常时可以扩展,阀值记得好像和系统物理内存大小有关,情景分析第二章这块讲的很清楚

论坛徽章:
0
3 [报告]
发表于 2008-04-01 11:24 |只看该作者
好像没有自动扩展吧?
刚才又研究了一下
ulimit -s 返回KB
所以我机器默认的用户堆栈大小是8M
我试过在堆栈上分配大于8192K的内存
直接段错误……

论坛徽章:
0
4 [报告]
发表于 2008-04-01 11:25 |只看该作者
有的,用户空间的堆栈是可以在一定范围内扩展的,具体的你可以看一下缺页异常处理部分的代码

论坛徽章:
0
5 [报告]
发表于 2008-04-01 11:26 |只看该作者
OK,我先看看ULK上关于Page Fault处理的部分吧

论坛徽章:
0
6 [报告]
发表于 2008-04-01 12:42 |只看该作者
原帖由 vestige 于 2008-4-1 10:05 发表
我记得几个星期前试过好像是32M左右……
但昨天用char a[1024*1024*1024]分配了1G的空间竟然编译运行都没
问题……

然后用
#ulimit -s
返回一个8192,不知所云……难道ulimit -s 返回内核栈的大小?

如果你的程序是这样写的,如

  1. int main()
  2. {
  3. #define SIZE (1024*1024*1024)
  4. char num[SIZE];
  5. }
复制代码

当然就不会有错误,这不过是减了个栈指针,不会引起page fault而导致segfault。
你在后面加个printf或char[SIZE-1] = 'a';试试,马上就会有segfault了

论坛徽章:
0
7 [报告]
发表于 2008-04-02 21:40 |只看该作者
刚才又试了试,在程序里分配数组
char a[1024 * 1024 * 1024 * 2];
编译报错说数组大小不能为负,能够理解

又试了试
char a[1024 *1024 *1024 * 2 -1];
编译报错说数组太大……

不知道gcc支持数组最大是多少?纯好奇而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP