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

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

