为什么堆栈大小有限制?
可能重复:
什么和堆栈和堆在哪里
我的Ubuntu安装具有8 MB的默认堆栈大小限制。 但我很好奇为什么我们需要限制用户程序的堆栈大小。 同一个程序可以通过malloc / mmap等使用其全部4 GB(对于32位程序)可寻址空间。为什么我们需要堆栈大小限制? 为什么堆栈不能增长直到它几乎满足堆?
事实上,堆栈确实越来越多。 因为在一般情况下它不需要很大,所以它不需要很大。 在浪费内存的情况下将其视为非常大的结果。
我不是100%确定堆栈是如何在Linux上实现的,但是在Windows上,为堆栈预留了大量空间。 这个数量可以在编译器选项中设置(你可能需要一个更大的堆栈用于深度递归程序)。 在运行时,可以通过防护页系统动态扩展堆栈。 在堆栈的末尾有一个警卫页面,当它被击中时,它将通过一个额外的页面扩展堆栈并向前推一个警卫页面。
堆栈探测是另一个有趣和相关的概念。 所以你的问题是'为什么不能堆栈直到它几乎满足堆? 堆栈的确增长了,但是由于大多数时间有一个巨大的堆栈可能是一个不受欢迎的bug的副作用,保留的大小不会很大(尽管这是可设置的)。
这篇文章是非常有趣和有关你的问题。
链接地址: http://www.djcxy.com/p/2267.html