Aarch64架构Linux系统是否存在Red Zone?若存在,大小为16还是128字节?
Linux 下 Aarch64 架构的 Red Zone 问题解答
核心结论
Linux 平台的 Aarch64 没有官方标准的 Red Zone,这和 x86_64 的明确约定有本质区别。
详细解答
是否存在合法 Red Zone?
Linux 遵循 ARM 官方的《AArch64 过程调用标准(AAPCS64)》,这份文档里完全没有定义 Red Zone。微软、苹果各自平台的 Red Zone 实现属于私有扩展,不适用于 Linux 环境。和 x86_64 Red Zone 的差异
x86_64 的 System V ABI 明确规定栈指针下方 128 字节为 Red Zone,信号处理、系统调用等操作都不会覆盖这片区域,用户态代码无需调整栈指针就能安全使用。但 Linux 下的 Aarch64 没有这个约定,栈指针下方的内存不属于调用者的安全范围,随时可能被中断、信号处理或其他上下文操作覆盖。官方文档依据
权威参考是 ARM 发布的 Procedure Call Standard for the Arm 64-bit Architecture (AAPCS64),文档仅定义了标准栈帧结构,无任何关于 Red Zone 的描述。能否在不调整 sp 的情况下用栈指针下方区域做临时存储?
绝对不行。在 Linux 的 Aarch64 环境中,未调整栈指针时,栈指针下方的内存并非安全区域:- 中断、信号处理程序会直接使用当前栈,大概率会覆盖这片内存;
- 系统调用的实现也不会特意保留这片区域;
- 即便当前没触发上述场景,后续内核版本或环境变更也可能导致这片内存被占用,代码会出现不可预测的崩溃或异常。
内容的提问来源于stack exchange,提问作者David C. Rankin
相关产品推荐
相关产品推荐

