メインメモリの領域のうち、プログラムの実行中に、関数の呼び出しや、自動記憶域期間をもつ変数や引数の保存に使用される領域のことです。
プログラムの実行開始時に、メインメモリの一部をスタックメモリとして使えるように準備します。このとき準備される大きさは OS やコンパイラの設定などで指定できますが、一般的には数キロバイト〜数メガバイト程度です。ヒープメモリとは異なり、プログラムの実行中に動的に確保・解放されることはありません。
名前のとおり、データ構造としての「スタック」がもつ後入れ先出し(LIFO)の特性と同じ動きでデータを管理します。関数の呼び出しや、自動記憶域期間を持つ変数の宣言が行われるときなどのタイミングで、スタックメモリの最上段にデータを積み上げます。関数から戻るときや、変数の記憶域期間が終了するときなどのタイミングで、スタックメモリの最上段からデータを下ろします。
このようにスタックメモリは、動的にはあらたなメモリを割り当てる処理を行わないので非常に高速であり、メモリの断片化も起こりにくいという特性があります。しかし、スタックメモリのサイズは固定されているので、関数の呼び出しが深くなりすぎていたり(再帰呼び出し)、宣言する変数が大きすぎたり(または多すぎたり)すると、スタックオーバーフローを引き起こす可能性があります。
データ構造としての「スタック」と混同しないように、「スタックメモリ」や「スタック領域」などと呼ぶと明確ですが、どちらも単に「スタック」と呼ばれることがあります。
関数呼び出しの履歴や、引数や戻り値などの情報を蓄えていくコールスタックはスタックメモリを使用しています。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |