スタック

提供: セキュリティ
2015年11月7日 (土) 23:38時点におけるDaemon (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

スタック(stack) とは、C言語プログラムがプログラムの制御に必要な情報や関数のローカル変数を置くメモリ領域です。

読み方

スタック
すたっく
stack
すたっく

概要

スタックは、「後入れ、先出し」(LIFO, Last In First Out)という方式で利用されます。 スタックにデータを追加する操作を「プッシュ」(push)、スタックからデータを取り出す操作を「ポップ」(pop)といいます。

たとえば、C言語で関数を呼び出すときに、CPUの状態を保存します。レジスタの内容をスタックに保存します。呼び出した関数が終了し、呼び出し元のルーチンに戻ってきたときに、レジスタの状態をスタックから元に戻します。 インテルのIA32のアセンブリ言語の命令だと PUSHA で、すべての汎用レジスタの内容をスタックにプッシュできます。POPAでスタックから汎用レジスタの内容を元に戻せます。

関数の引数のデータもスタックに入ります。関数の引数の値は、レジスタ渡しされることもあるので、必ずしもスタックにすべて入るというわけではありません。ケースバイケースです。コンパイラの実装や最適化などに依存します。

スタックに積まれるもの

スタックには、関数ごとに以下のデータが積まれます。

上記の集合(塊)をスタックフレームと呼びます。スタックには、スタックフレームがいくつも積まれていくイメージです。

関連項目




スポンサーリンク