令和元年度春期 応用情報技術者試験 午前 問17
プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち,適切なものはどれか。
- ア サブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。
- イ スタック領域には未使用領域が存在するが,ヒープ領域には未使用領域は存在しない。
- ウ ヒープ領域はスタック領域の予備領域であり,スタック領域が一杯になった場合にヒープ領域が動的に使用される。
- エ ヒープ領域も構造的にはスタックと同じプッシュとポップの操作によって,データの格納と取出しを行う。
解答・解説を見る
正解:ア
AI解説
スタック領域はLIFO(後入れ先出し)で管理され、サブルーチン呼出し時の戻り番地や局所変数の退避に使われる。一方ヒープ領域はプログラムが実行時に動的に確保・解放する領域で、確保と解放の順序に規則性がないデータの格納に適する。「呼出しの入れ子構造=スタック、任意順序の動的確保=ヒープ」が判断基準である。 ア: 正しい。戻り番地は呼出しの逆順で戻るためLIFOのスタックが適し、malloc等による動的確保データは任意の順序で解放されるためヒープが使われる。 イ: 誤り。スタックにもヒープにも未使用領域は存在する。ヒープでは確保・解放の繰返しで未使用の断片(フラグメンテーション)が生じることがある。 ウ: 誤り。ヒープはスタックの予備領域ではなく、用途の異なる独立した領域である。スタックが満杯になればスタックオーバーフローとなる。 エ: 誤り。プッシュとポップで格納・取出しを行うのはスタックの構造である。ヒープは任意のアドレスを動的に確保・解放する。 💡 「スタック=関数呼出し・戻り番地・LIFO」「ヒープ=動的メモリ確保・順序不定」とセットで覚える。ヒープ領域の断片化(フラグメンテーション)も頻出関連知識である。
出典:令和元年度 春期 応用情報技術者試験 午前 問17 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。