応用情報技術者 2014年 秋期 午前2 問15
問題文
プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち、適切なものはどれか。
選択肢
ア:サブルーチンからの戻り番地の退避にはスタック領域が使用され、 割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。(正解)
イ:スタック領域には未使用領域が存在するが、 ヒープ領域には未使用領域は存在しない。
ウ:ヒープ領域はスタック領域の予備領域であり、 スタック領域が一杯になった場合にヒープ領域が動的に使用される。
エ:ヒープ領域も構造的にはスタックと同じプッシュとポップの操作によって、 データの格納と取出しを行う。
プログラムの実行時の記憶領域(スタック領域とヒープ領域)【午前2 解説】
要点まとめ
- 結論:サブルーチンの戻り番地はスタック領域に保存され、ヒープ領域は割当てと解放の順序に依存しない動的メモリ管理に使われます。
- 根拠:スタックはLIFO構造で関数呼び出しの管理に最適、一方ヒープは自由な順序でメモリ割当て・解放が可能な領域です。
- 差がつくポイント:スタックとヒープの役割や管理方法の違いを正確に理解し、誤ったイメージ(例えばヒープがスタックの予備領域など)を持たないことが重要です。
正解の理由
選択肢アは、スタック領域がサブルーチンの戻り番地の退避に使われること、ヒープ領域が割当てと解放の順序に関連しないデータ格納に使われることを正しく述べています。スタックはLIFO(後入れ先出し)構造で関数呼び出しの管理に適し、ヒープは動的メモリ割当てに用いられます。これらの基本的な特徴を正確に説明しているため正解です。
よくある誤解
ヒープ領域はスタックの予備領域ではなく、独立した動的メモリ管理領域です。スタックとヒープは管理方法も用途も異なり、混同しやすい点に注意が必要です。
解法ステップ
- スタック領域の役割を確認する(関数呼び出しの戻り番地や局所変数の管理)。
- ヒープ領域の特徴を理解する(動的メモリ割当て、割当てと解放の順序が自由)。
- 選択肢の記述がこれらの特徴に合致しているかを検証する。
- スタックとヒープの管理方法の違い(LIFO vs 任意)を基準に誤りを見抜く。
- 正しい説明をしている選択肢を選ぶ。
選択肢別の誤答解説
- イ:ヒープ領域にも未使用領域は存在します。動的に割当て・解放されるため、未使用領域が断片化して存在することもあります。
- ウ:ヒープはスタックの予備領域ではありません。両者は独立した領域であり、スタックが一杯になってもヒープが自動的に使われることはありません。
- エ:ヒープはスタックのようなプッシュ・ポップ操作で管理されません。ヒープは自由な順序で割当て・解放が行われるため、管理方法が異なります。
補足コラム
スタック領域は高速なアクセスが可能で、関数呼び出し時の戻り番地や局所変数の保存に使われます。一方、ヒープ領域はプログラムの実行中に必要に応じてメモリを動的に確保・解放するために使われ、メモリ管理の効率化や柔軟性を提供します。メモリリークや断片化の問題もヒープ管理で重要な課題です。
FAQ
Q: スタック領域はどのように管理されていますか?
A: スタックはLIFO構造で、関数呼び出し時に戻り番地や局所変数を順に積み上げ、関数終了時に逆順で取り出します。
A: スタックはLIFO構造で、関数呼び出し時に戻り番地や局所変数を順に積み上げ、関数終了時に逆順で取り出します。
Q: ヒープ領域のメモリ割当てはどのように行われますか?
A: ヒープは任意の順序でメモリを割り当て・解放でき、プログラムの実行中に動的にメモリ管理が行われます。
A: ヒープは任意の順序でメモリを割り当て・解放でき、プログラムの実行中に動的にメモリ管理が行われます。
関連キーワード: スタック領域、ヒープ領域、動的メモリ管理、LIFO, メモリ割当て、プログラム実行時メモリ

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

