1

在这种情况下,“保留”到底是什么意思?递减堆栈指针如何在堆栈上保留空间?调整堆栈指针寄存器有副作用吗?

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

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

4

1 回答 1

3

只是堆栈指针现在有点低的事实已经保留了空间。递归调用的函数等将(希望)通过不写入以这种方式保留的内存来尊重保留(没有什么真正阻止它们,但如果它们这样做,那么它们就会被破坏)。

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

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

于 2015-11-10T17:01:31.573 回答