递减堆栈指针在堆栈上保留空间是什么意思?

时间:2015-11-10 16:48:35

标签: assembly x86 x86-64 cpu-registers stackframe

在此上下文中“保留”究竟是什么意思以及如何减少堆栈指针在堆栈上保留空间?调整堆栈指针寄存器有一些副作用吗?

“预留空间”听起来像内存分配,但堆栈的内存通常是固定的,并且预先分配,所以我不认为这就是它的含义。

我认为这只是意味着我们告诉别人不要使用我们的堆栈空间,而其他人只是简单地读取堆栈指针寄存器,并按惯例知道它不应该破坏任何高于此的东西。如果那是对的那么那个人是谁?后续的函数调用?操作系统?

1 个答案:

答案 0 :(得分:3)

现在堆栈指针有点低已保留空间。递归调用的函数等等(希望)通过不写入保留的内存(没有任何东西真正阻止它们,但是如果他们这样做,那么它们就会被破坏)(希望)来尊重保留。

原则上可以写入未以这种方式分配的堆栈空间,但由于它是一个通常没有完成的免费(特别是它可能不会,也可能不会,在函数调用中存活,这可能容易分配它并在其上写,并且信号处理程序使用此空间(如果它不是红色区域的一部分),最大的例外是叶子函数中x64上的红区(不在Windows上)。

一种分配,它是在固定大小的缓冲区内分配,但是所有也是如此,最终你无论如何都只能分配这么多内存。它只是更有限。