堆栈增长如何在windows和linux上工作?

堆栈增长如何在windows和linux上工作?,windows,linux,stack,alloca,Windows,Linux,Stack,Alloca,我刚刚读到,如果windows程序需要堆栈上超过4k的内存,它会在函数项上调用alloca来扩展堆栈。我说,每次点击保护页时,windows都会为堆栈分配一个新的页面,因此\u alloca以4k的步骤访问堆栈以分配空间 我还读到,这只适用于windows。如果linux(或其他操作系统)不需要alloca,它们如何解决这个问题呢?linux依赖于高度优化的页面错误处理,因此发生的情况是程序只在堆栈上推送内容,页面错误处理程序将动态扩展堆栈。那么堆栈中是否允许存在漏洞?这样做似乎合乎逻辑。win

我刚刚读到,如果windows程序需要堆栈上超过4k的内存,它会在函数项上调用alloca来扩展堆栈。我说,每次点击保护页时,windows都会为堆栈分配一个新的页面,因此
\u alloca
以4k的步骤访问堆栈以分配空间


我还读到,这只适用于windows。如果linux(或其他操作系统)不需要alloca,它们如何解决这个问题呢?

linux依赖于高度优化的页面错误处理,因此发生的情况是程序只在堆栈上推送内容,页面错误处理程序将动态扩展堆栈。

那么堆栈中是否允许存在漏洞?这样做似乎合乎逻辑。windows使用alloca的原因是什么?不,虚拟堆栈没有漏洞。当然,RAM中真正的页面是分散的<代码>\u alloca在需要时可能会快一点,但当堆栈足够大时,它就浪费了。这不是堆栈中的洞的意思,而是指两个映射页面之间的未映射页面。