先頭へ戻る

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

Programming Place Plus トップページ -- 用語集

先頭へ戻る

名称


解説

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

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

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

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

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

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

サブルーチンの呼び出しの連鎖が長く続くと、スタックフレームが膨大になり、コールスタックの領域を使い尽くしてしまいます。こうなると、実行時エラーになったり、ほかの用途で使われているメモリ領域を破壊したりします。このような現象は、スタックオーバーフローと呼ばれています。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー