来自维基百科:
在计算机中,红区是函数栈帧中一个固定大小的区域,超出返回地址范围,该函数不予保留。调用者函数可以利用红区存储本地变量,而无需修改堆栈指针。这段内存区域不得由中断/异常/信号处理程序修改。System V使用的x86-64 ABI规定了128字节的红区,它直接开始于返回地址之后,并包括函数的参数。OpenRISC toolchain假定有一个128字节的红区。
%rsp指向位置之后的128个字节被认为是保留的,并且不得被信号或中断处理程序修改。因此,函数可以使用此区域存储跨函数调用不需要的临时数据。特别地,叶子函数可以将整个堆栈帧作为其使用,而无需在序言和尾声中调整堆栈指针。这个区域称为红区。
给定这两个引用,红区是在堆栈返回地址上方还是下方?
由于此红区相对于
RSP
,每次push
是否向下移动,每次pop
是否向上移动?
红区在堆栈返回地址上方。
由于该红区是相对于%rsp的,因此每次
push
将使其向下移动,每次pop
将使其向上移动。