スタックとは?すたっく
スタックとは、最後に入れたデータを最初に取り出す後入れ先出し(LIFO)のデータ構造で、push と pop の2操作で扱う。プログラムの実行時には、関数呼出しの戻り番地・引数・局所変数をひとまとまり(スタックフレーム)にして積み、戻るときに逆順で復元するために使われる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
関数が別の関数を呼び、その先でさらに呼ぶという入れ子は、呼んだ順と戻る順がちょうど逆になる。この性質にそのまま合う構造がスタックであり、退避場所を固定番地に置く方式では再帰も多重割込みも扱えなかった。CPUがスタックポインタというレジスタを持ってハードウェアの水準で支えているのはこのためである。応用情報では逆ポーランド記法の評価、再帰の動作、バッファオーバフローの仕組みとして問われる。
具体例
逆ポーランド記法「3 4 + 5 *」は、数値を積み、演算子が来たら2つ取り出して結果を積み直すだけで評価できる。x86系CPUのcall命令が戻り番地をスタックへ積み、ret命令が取り出す仕組みも同じで、この領域を溢れさせて戻り番地を書き換えるのがスタックバッファオーバフローである。
試験での引っ掛け
先入れ先出しのキュー(FIFO)と向きが逆である点がまず問われる。またn個の要素をスタック経由で出力するときに作れる順序の総数はカタラン数であって n! ではない——pushとpopを交ぜられる一方、空のスタックからは取り出せないという制約が効くためである。
関連用語
出た過去問
出典:平成28年度 秋期 応用情報技術者試験 午前 問3(IPA)
逆ポーランド表記法で表された式を評価する場合、途中の結果を格納するためのスタックを用意し、式の項や演算子を左から右に順に入力し処理する。スタックが図の状態のとき…
正解:C 演算子 D
要点:RPNは演算子で上位2つをポップ、後から出た方が左項
逆ポーランド表記法の評価では、演算子が現れるとスタックから2つ取り出して演算し、結果を積み直します。先に取り出されるのはスタックの最上位である D で、次が C です。二項演算では先に取り出した値が右側の被演算数になるため、中置表記に直すと C 演算子 D となります。引き算や割り算のように順序が結果に影響する演算では、この向きの取り違えが誤答に直結します。
出典:平成28年度 春期 応用情報技術者試験 午前 問8(IPA)
CPUのスタックポインタが示すものはどれか。
正解:サブルーチン呼出し時に,戻り先アドレス及びレジスタの内容を格納するメモリのアドレス
要点:スタックポインタは退避データを積む位置を指す
スタックポインタは、スタック領域の先頭位置を保持するレジスタである。サブルーチン呼出しや割込みの際に戻り先アドレスやレジスタ内容を退避する場所を示す。
出典:平成30年度 春期 応用情報技術者試験 午前 問8(IPA)
再帰的な処理を実現するためには、再帰的に呼び出したときのレジスタ及びメモリの内容を保存しておく必要がある。そのための記憶管理方式はどれか。
正解:LIFO
要点:再帰の状態退避はLIFO(スタック)で管理する
再帰呼出しでは、呼び出した順序と逆の順序で復帰するため、最後に退避した情報を最初に取り出す必要がある。この後入れ先出しの性質をもつ記憶管理方式がLIFOであり、スタックとして実装される。復帰アドレスやレジスタの内容はスタックフレームとして積み上げられる。
出典:平成31年度 春期 応用情報技術者試験 午前 問17(IPA)
プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち、適切なものはどれか。
正解:サブルーチンからの戻り番地の退避にはスタック領域が使用され、割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。
要点:スタックは後入れ先出し、ヒープは任意順で確保・解放する領域
スタック領域は後入れ先出しで管理され、サブルーチンの戻り番地や局所変数など、呼出しと復帰に対応して確保・解放されるデータに使われる。一方ヒープ領域は任意の時点で確保と解放ができるため、確保順と解放順が対応しない動的データの格納に使われる。
出典・参考
公式シラバスの1 基礎理論 > 1. データ構造 > (2) データ構造の種類に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。