Demystifying the Red Zone: Optimizing Leaf Functions
5 days ago
- #System V ABI
- #Red Zone
- #Assembly
- 在 x86-64 和 ARM64 Mac 系统中,红区是栈指针下方的一个 128 字节安全区域,由 System V ABI 定义。
- 它允许叶函数跳过栈指针调整,通过减少指令数量来优化性能。
- 内核异步写入(如信号帧)会避开红区,确保 rsp 下方 128 字节内的数据保持原状。
- 一个工作量证明函数示例展示了这种优化,通过避免栈管理操作节省了 6% 的指令。
- Windows 系统未采用红区,而是使用 32 字节的影子空间进行寄存器参数溢出。
- 汇编代码验证了红区的保护机制:其内部内存在信号处理过程中得以保留,而外部数据则被破坏。