コールスタック
コールスタックまたは呼び出しスタック(英: call stack)とは、プログラムで実行中のサブルーチン(関数)に関する情報を格納するスタックである。実行中のサブルーチンとは、呼び出されたもののまだ処理が完了していないサブルーチンのことを指す。実行スタック (execution stack)、制御スタック (control stack)、関数スタック (function stack) などとも呼ばれる。なお文脈によっては、短縮して単にスタックともいう。
コールスタックが関係する具体例として、次の擬似コードを挙げる。
上の疑似高水準言語のコードでは、サブルーチンDrawSquare内の4ヶ所から、直線を描画するサブルーチンDrawLineを呼び出すとしたとき、DrawLineは4ヶ所のうちのどこに戻ればよいかを知る必要がある。一般にDrawSquareのコード内でDrawLineを呼び出しているそれぞれの箇所で、呼び出し処理の次の命令のアドレス(これをリターンアドレスと呼ぶ)をコールスタックに格納することでこれを実現する。
リターンアドレスだけでなく、環境によってはサブルーチンから復帰する際に戻さなければならないハードウェアやソフトウェアのステータスがあるかもしれない。例えば、特権レベル、例外処理情報、演算モードなどである。必要に応じてこれらもリターンアドレスのようにコールスタックに格納される。
典型的なコールスタックはリターンアドレス、局所データ、引数を格納する(これを「コールフレーム」と呼ぶ)。環境によってはコールスタックの機能に差異がある。例えばFORTH言語では、コールスタックにはリターンアドレスと局所変数のみが格納され(これをリターンスタックと呼ぶ)、引数は別のデータスタックに格納される。多くのFORTHの実装では浮動小数点数の引数を格納するための第三のスタックが存在する。