コールスタック | Programming Place Plus 用語集

トップページ用語集

名称

解説

プログラム実行時呼び出しサブルーチンに関する情報を蓄えるスタックのことです。

サブルーチン(関数メソッドなど)を呼び出すたび、戻り先のメモリアドレス(リターンアドレス)、戻り値引数、(静的変数でない)ローカル変数のためのメモリ領域といった情報を格納(ワインド)します。サブルーチンから抜け出すときには、この情報を取り除きます(アンワインド)。ここで、1つのサブルーチンに関する情報のまとまりを、スタックフレームと呼びます。

複数のスレッドが動作しているプログラムでは、コールスタックはスレッドごとに存在します。

スタックフレームにアクセスするために、コールスタックの最上段の位置をあらわすスタックポインタを使ったり、スタックフレーム内の特定の情報がある位置をあらわすフレームポインタを使ったりします。これらは専用レジスタの一種です。

コールスタックの必要性や利用方法はいくつかありますが、特にサブルーチン内のコード実行を終えた後の戻り先を制御するために重要な仕組みになっています。高級言語では、コンパイラが自動的に必要なコードを生成しますが、低級言語では、プログラマーが自力で行わなければならない場合もあります。

デバッグ目的で利用されることも多く、任意のタイミングでコールスタックの内容をみることで、現在までのサブルーチンの呼び出し経路、そのときの引数やローカル変数の内容などを確認できます。このようなデバッグの手法をスタックトレースといいます。

Visual Studio でスタックトレースを行う方法を、「Visual Studio編関数の呼び出し履歴」で取り上げています。

サブルーチンの呼び出しの連鎖が長く続くと、スタックフレームが膨大になり、コールスタックの領域を使い尽くすことがあります。このような状況を、スタックオーバーフローと呼びます。スタックオーバーフローが起こると、たまたまメモリ上にあった無関係のデータを上書きしてしまい、メモリ破壊を起こす可能性があります。実行時エラーになる場合もあります。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る