計算機科學領域中,紅區是一個函數堆棧內當前棧指針下方(針對下推形堆棧)的一個固定大小的區域,該區域被保留且可被安全使用。它最常用語葉子函數(不會調用其他函數的函數)來分配額外的棧內存,而同時不會移動棧指針,從而節省一條指令。

紅區是否存在取決於調用約定。使用 System V AMD64 ABI 的 x86-64 系統(包括 LinuxmacOS)使用 128 字節大小的紅色區域,該區域從棧指針當前值的正下方開始。OpenRISC 工具鏈假定使用 128 字節的紅色區域[1]

微軟的 Windows 系統在 x86 上並沒有設計實現紅區概念。[2]事實上,ABI明確指出棧指針控制之外的內存是易失的,可能會被調試器或者中端處理器覆寫。不過,微軟的 Windows 在其他架構上也實現過紅區,比如 IA-64 上的紅區為 16 字節,在 AArch32 上為 8 字節,在 AArch64 上為 16 字節。


參考資料

編輯
  1. ^ OpenCores Wiki - OpenRISC GNU toolchain. [2014-05-28]. 
  2. ^ Fog, Agner. Calling conventions for different C++ compilers and operating systems (PDF). Denmark. 2021-01-31: 20 [2021-07-11]. 

外部連結

編輯