コールスタック 【call stack】 関数スタック / function stack / 実行スタック / execution stack / 制御スタック / control stack

概要

コールスタック(call stack)とは、コンピュータプログラム実行時に用いられるメモリ領域の一つで、関数などを呼び出す際に呼び出し元の情報や引き渡す引数などを一時的に保管しておくためのもの。

スタックstack)は最も基本的なデータ構造の一種で、データを領域の末尾に追加していき、取り出すときは末尾から取り出すというルールで管理される。このルールは最も最後に追加されたデータが最初に取り出されるため、「LIFO」(Last-In, First-Out)とも呼ばれる。

プログラム実行される際には一定のメモリ領域がコールスタック用に確保される。関数などの呼び出しがわれると、終了時に戻るべきメモリ上の実行位置(リターンアドレス)や、呼び出し側が保持していたレジスタなどの情報スタックに追加される。この操作を「ワインド」(winding)あるいは「プッシュ」(push)という。

関数実行が終わると、スタックの末尾のデータが取り出されて削除され、保管してあった内容に従ってレジスタなどを呼び出し前の状態に復元し、リターンアドレスで指定された位置から実行を再開する。この操作を「アンワインド」(unwinding)あるいは「ポップ」(pop)という。

関数の中からさらに別の関数を呼び出す場合には、スタックの末尾にデータを追加して実行を開始し、終了したら末尾のデータをアンワインドする。複雑なプログラムでは何段階もスタック情報が積み上がっていく。スタック用に確保した領域を使い果たし満杯状態でさらに関数呼び出しをおうとすると「スタックオーバーフロー」という実行時エラーとなる。

一回の操作でスタックに積み上げるひとまとまりのデータの単位のことを「スタックフレーム」(stack frame)という。内容や形式はプログラミング言語オペレーティングシステムOS)、CPUの種類などによって異なる。リターン時に必要となる情報だけでなく、呼び出し側からの引数の引き渡しなどに用いる場合もある。

(2024.1.26更新)

他の辞典による解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる