平成26年度秋期 応用情報技術者試験 午前 問15
プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち,適切なものはどれか。
- ア サブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。
- イ スタック領域には未使用領域が存在するが,ヒープ領域には未使用領域は存在しない。
- ウ ヒープ領域はスタック領域の予備領域であり,スタック領域が一杯になった場合にヒープ領域が動的に使用される。
- エ ヒープ領域も構造的にはスタックと同じプッシュとポップの操作によって,データの格納と取出しを行う。
解答・解説を見る
正解:ア
AI解説
スタック領域はLIFO(後入れ先出し)で管理され、サブルーチン(関数)呼出し時の戻り番地や局所変数の退避に使われる。呼出しと復帰の順序が入れ子構造になるためLIFOと相性がよい。一方ヒープ領域は、mallocやnewなどで動的に確保・解放するデータ用の領域で、割当てと解放の順序に関連がない(任意の順序でよい)データの格納に使用される。 ア: 正解。戻り番地の退避=スタック領域、解放順序が自由な動的データ=ヒープ領域という役割分担の正しい説明である。 イ: どちらの領域にも未使用領域は存在し得る。特にヒープは確保・解放の繰返しで断片化した未使用領域が生じやすい。 ウ: ヒープはスタックの予備領域ではなく、用途の異なる独立した領域である。スタックあふれ時に自動転用されることはない。 エ: ヒープはプッシュ/ポップの規律には従わず、任意のタイミング・順序で確保と解放を行う。 💡 「スタック=関数呼出し(戻り番地・局所変数)、順序はLIFO」「ヒープ=動的メモリ、順序自由、断片化やメモリリークの温床」と対で覚える。データ構造のヒープ(半順序木)とは別物という点もひっかけどころ。
出典:平成26年度 秋期 応用情報技術者試験 午前 問15 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。