応用情報技術者 2020年 秋期 午前2 問16
問題文
記憶領域の動的な割当て及び解放を繰り返すことによって、どこからも利用できない記憶領域が発生することがある。このような記憶領域を再び利用可能にする機能はどれか。
選択肢
ア:ガーベジコレクション(正解)
イ:スタック
ウ:ヒープ
エ:フラグメンテーション
記憶領域の動的割当てと解放に伴う問題の解決策【午前2 解説】
要点まとめ
- 結論:動的に割り当てられた記憶領域の未使用部分を自動的に回収し再利用可能にする機能はガーベジコレクションです。
- 根拠:プログラムが不要になったメモリを手動で解放し忘れると、利用できない領域が残るため自動回収が必要です。
- 差がつくポイント:スタックやヒープは記憶領域の管理方法であり、フラグメンテーションは断片化の問題である点を正確に理解しましょう。
正解の理由
ア: ガーベジコレクションは、プログラムが動的に確保したメモリのうち、もはや参照されていない領域を自動的に検出し解放する機能です。これにより、どこからも利用できない「ゴミ」メモリを回収し、再利用可能にします。手動での解放忘れによるメモリリークを防ぐ重要な仕組みです。
よくある誤解
スタックやヒープはメモリの割当て領域の種類であり、メモリの自動回収機能ではありません。フラグメンテーションはメモリの断片化現象であり、回収機能そのものではありません。
解法ステップ
- 問題文の「どこからも利用できない記憶領域」が何を指すか確認する。
- 動的割当てと解放の繰り返しで発生する問題を理解する。
- 選択肢の意味を整理し、メモリの自動回収機能を持つものを選ぶ。
- ガーベジコレクションが該当することを確認し、正解とする。
選択肢別の誤答解説
- イ: スタックは関数呼び出し時の一時的な記憶領域であり、動的なメモリ回収機能は持ちません。
- ウ: ヒープは動的にメモリを割り当てる領域ですが、回収機能は含みません。
- エ: フラグメンテーションはメモリの断片化現象であり、問題の解決策ではありません。
補足コラム
ガーベジコレクションはJavaやC#などの高級言語で標準的に採用されており、プログラマの負担を軽減します。一方、C言語などでは手動でメモリ解放を行うため、メモリリークに注意が必要です。
FAQ
Q: ガーベジコレクションはどのように動作しますか?
A: プログラムが参照しなくなったメモリ領域を検出し、自動的に解放して再利用可能にします。
A: プログラムが参照しなくなったメモリ領域を検出し、自動的に解放して再利用可能にします。
Q: フラグメンテーションはガーベジコレクションと関係ありますか?
A: フラグメンテーションはメモリの断片化問題であり、ガーベジコレクションは不要メモリの回収機能です。直接の解決策ではありません。
A: フラグメンテーションはメモリの断片化問題であり、ガーベジコレクションは不要メモリの回収機能です。直接の解決策ではありません。
関連キーワード: ガーベジコレクション、メモリ管理、動的割当て、メモリリーク、フラグメンテーション

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

