堆栈增长如何在 Windows 和 linux 上工作?
Posted
技术标签:
【中文标题】堆栈增长如何在 Windows 和 linux 上工作?【英文标题】:how does stack growing work on windows and linux? 【发布时间】:2011-10-10 07:16:49 【问题描述】:我刚刚读到 Windows 程序在函数入口调用 _alloca
以增加堆栈,如果它们需要超过 4k 的堆栈。我猜想每次访问保护页面时,windows 都会为堆栈分配一个新页面,因此_alloca
以 4k 步访问堆栈以分配空间。
我还读到这仅适用于 Windows。如果不需要_alloca
,linux(或其他ose)如何解决这个问题?
【问题讨论】:
【参考方案1】:Linux 依赖于高度优化的页面错误处理,因此程序只是将内容压入堆栈,页面错误处理程序将动态扩展堆栈。
【讨论】:
那么堆栈中的孔是否允许?这样做似乎合乎逻辑。 windows使用_alloca的原因是什么? 不,虚拟堆栈没有漏洞。当然,RAM 中的真实页面是分散的。_alloca
在需要的时候可能会快一点,但是当堆栈足够大时它就被浪费了。
这不是堆栈中的空洞的意思——它意味着两个映射页面之间的未映射页面。以上是关于堆栈增长如何在 Windows 和 linux 上工作?的主要内容,如果未能解决你的问题,请参考以下文章