Loading article…
コンピューティングにおいて、レッド ゾーンは、関数のスタック フレーム内の、現在のスタック ポインタの下 (プッシュダウン スタックの場合)にある、予約されていて安全に使用できる固定サイズの領域です。これは、リーフ関数 (他の関数を呼び出さない関数) で、スタック ポインタを移動せずに追加のスタック メモリを割り当てるために最もよく使用され、命令が節約されます。
レッドゾーンが存在するかどうかは、呼び出し規約によって異なります。System V AMD64 ABIを使用するx86-64システム( LinuxおよびmacOSを含む)は、スタックポインタの現在の値のすぐ下から始まる128バイトのレッドゾーンを使用します。[1] [2] OpenRISC ツールチェーンは、 128バイトのレッドゾーンを想定しています。[3] Microsoft Windowsには、 x86上のレッドゾーンの概念がありません。[4]実際、ABIでは、スタックポインタを超えるメモリは揮発性であり、デバッガや割り込みハンドラによって上書きされる可能性があることが明示的に規定されています。[5] [6]ただし、Microsoft Windowsには、 IA-64で16バイト、AArch32で8バイト、AArch64で16バイトのレッドゾーンがあります。[6]
レッドゾーンは、割り込み/例外/シグナルハンドラによる変更から安全です。
注釈と参考文献
- ^ Michael Matz、Jan Hubička、Andreas Jaeger、他編 (2018-01-28)。「System V アプリケーションバイナリインターフェイス: AMD64 アーキテクチャプロセッササプリメント (LP64 および ILP32 プログラミングモデル付き) バージョン 1.0」(PDF)。1.0。
- ^ 「i386 および x86-64 オプション - GNU コンパイラ コレクション (GCC) の使用」。2011 年 4 月 10 日閲覧。
- ^ 「OpenCores Wiki - OpenRISC GNU ツールチェーン」 。2014年 5 月 28 日閲覧。
- ^ Fog, Agner (2021-01-31). さまざまなC++コンパイラーおよびオペレーティングシステムの呼び出し規約(PDF) . デンマーク. p. 20 . 2021-07-11閲覧。
{{cite book}}: CS1 メンテナンス: 場所が見つかりません 発行者 (リンク) - ^ Bendersky, Eli (2011-09-06). 「x86-64 上のスタックフレームレイアウト」。Eli Bendersky のウェブサイト。2021年 7 月 11 日閲覧。
- ^ ab Chen, Raymond (2019-01-11). 「なぜレッドゾーンを定義する必要があるのか?スタックを何にでも使えないのか?」The Old New Thing . 2021-07-11閲覧。
