函数的堆栈空间居然有限制!

发布于 2022-09-18 23:14:21 字数 477 浏览 22 评论 0

函数的堆栈空间居然有限制!
很多年来,一直以为函数的堆栈空间可以是无限的,或者说仅受硬盘的限制。
然而今天在solaris 8 (sun sparc, gcc)上写了这样一小段程序:
main()
{
  char s[8385097];
  printf("ok");
}
运行时 segment fault (core dumped)
把8385097改成8385096,就可以了!
我想这是因为堆栈空间有限制所导致的。
8385096 + 3512 = 8M。
就是说一个进程所允许的静态空间接近8M。
也许我应该再看一下sun sparc的寻址范围。
我目前的猜想是:受到SUN SPARC寻址范围的限制,一个进程只允许8M的静态空间,其中又有3512个字节用来放PCB之类的东西,所以只剩 8385096 个字节了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

半寸时光 2022-09-25 23:14:21

原帖由 wugamp 于 2008-5-16 17:18 发表
函数的堆栈空间居然有限制!
很多年来,一直以为函数的堆栈空间可以是无限的,或者说仅受硬盘的限制。
然而今天在solaris 8 (sun sparc, gcc)上写了这样一小段程序:
main()
{
  char s[8385097];
  prin ...

跟寻址范围没有关系。

墨落画卷 2022-09-25 23:14:21

堆栈的大小是可以调整的。

此刻的回忆 2022-09-25 23:14:21

情场探花th老师?
OS里,一般来说会指定栈的大小,否则调度的成本太大,很多OS下栈的大小可修改。

默嘫て 2022-09-25 23:14:21

再大也总不能超过物理内存+Swap的大小吧,呵呵

蓝色星空 2022-09-25 23:14:21

要有人说"函数的堆栈空间居然无限制!"  估计这系统就要崩了.

娇妻 2022-09-25 23:14:21

原帖由 hyyuanqiang 于 2008-5-18 20:08 发表
哈哈
直接 malloc 一个很大的空间
让机器直接挂掉

操作系统没有这么脆弱的。

や三分注定 2022-09-25 23:14:21

这不是‘函数‘栈空间的限制, 而是进程栈空间的限制。

man -s 2 setrlimit

夜还是长夜 2022-09-25 23:14:21

栈不关malloc什么事情,这是不同的内存段。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文