gpt4 book ai didi

stack - 为什么对堆栈大小有限制?

转载 作者:行者123 更新时间:2023-12-04 12:43:06 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




10年前关闭。




Possible Duplicate:
What and where are the stack and heap



我安装的 Ubuntu 的默认堆栈大小限制为 8 MB。但我很好奇为什么我们需要限制用户程序的堆栈大小。同一个程序可以通过 malloc/mmap 等使用其所有 4 GB(对于 32 位程序)可寻址空间。那么为什么我们需要堆栈大小限制?为什么堆栈不能增长到几乎遇到堆?

最佳答案

事实上,堆栈确实增长得越来越多。它不需要开始很大,因为在一般情况下,它不需要很大。让它变得非常大会导致浪费内存占用。
我不是 100% 确定堆栈是如何在 Linux 上实现的,但在 Windows 上,为堆栈保留了大量空间。这个数量可以在编译器选项中设置(对于深度递归程序,您可能需要更大的堆栈)。在运行时,可以通过保护页面系统动态扩展堆栈。在堆栈的末尾有一个保护页,当点击它时会将堆栈扩展一个额外的页面并将保护页向前推一个。
堆栈探测是另一个有趣且相关的概念。所以你的问题是“为什么堆栈不能增长直到它几乎与堆相遇?”堆栈确实会增长,但由于大多数时候拥有巨大的堆栈可能是错误的不良副作用,因此保留的大小不会很大(尽管这是可以设置的)。
This article非常有趣且与您的问题相关。

关于stack - 为什么对堆栈大小有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6648059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com