スタック
提供: セキュリティ
スポンサーリンク
スタック(stack) とは、C言語プログラムがプログラムの制御に必要な情報や関数のローカル変数を置くメモリ領域です。
読み方
- スタック
- すたっく
- stack
- すたっく
概要
スタックは、「後入れ、先出し」(LIFO, Last In First Out)という方式で利用されます。 スタックにデータを追加する操作を「プッシュ」(push)、スタックからデータを取り出す操作を「ポップ」(pop)といいます。
たとえば、C言語で関数を呼び出すときに、CPUの状態を保存します。レジスタの内容をスタックに保存します。呼び出した関数が終了し、呼び出し元のルーチンに戻ってきたときに、レジスタの状態をスタックから元に戻します。 インテルのIA32のアセンブリ言語の命令だと PUSHA で、すべての汎用レジスタの内容をスタックにプッシュできます。POPAでスタックから汎用レジスタの内容を元に戻せます。
関数の引数のデータもスタックに入ります。関数の引数の値は、レジスタ渡しされることもあるので、必ずしもスタックにすべて入るというわけではありません。ケースバイケースです。コンパイラの実装や最適化などに依存します。
スタックに積まれるもの
スタックには、関数ごとに以下のデータが積まれます。
上記の集合(塊)をスタックフレームと呼びます。スタックには、スタックフレームがいくつも積まれていくイメージです。
関連項目
ツイート
スポンサーリンク