Skip to content

Latest commit

 

History

History
12 lines (7 loc) · 1 KB

File metadata and controls

12 lines (7 loc) · 1 KB

14.1.4 Red Zone

red zone 是一段 128 字节的区域,从 rsp 向低地址延伸。它放宽了“比 rsp 更低的地址没有数据”的限制;在 red zone 上存放数据是安全的,而且不会被系统调用或者中断所覆盖。这里我们说的是在不改变 rsp 的前提下用相对于 rsp 的地址的直接内存写的情况。如果进行函数调用,那还是有可能覆盖掉 red zone。

red zone 的存在是为了一种特殊的优化。如果一个函数在生命周期内不调用任何其它函数,那么就可以忽略掉其栈帧的创建 (rbp 的变化)。局部变量和参数可以使用 rsp 的相对地址进行访问,而不是 rbp。此外:

  • 局部变量的总大小不应超过 128 字节。
  • 函数是叶子函数(不调用其它任何函数)。
  • 函数不修改 rsp 寄存器;否则就不可能用相对 rsp 的地址去访问内存了。

通过向前挪动 rsp,你依然可以获得可以分配数据的比 128 字节大的空闲空间。参见 16.1.3 节。