応用情報技術者 2013年 秋期 午前2 問18
問題文
記憶領域の動的な割当て及び解放を繰り返すことによって、どこからも利用できない記憶領域が発生することがある。このような記憶領域を再び利用可能にする機能はどれか。
選択肢
ア:ガーベジコレクション(正解)
イ:スタック
ウ:ヒープ
エ:フラグメンテーション
記憶領域の動的割当てと解放に関する問題【午前2 解説】
要点まとめ
- 結論:動的に割り当てられた記憶領域のうち、どこからも参照されない領域を自動的に回収する機能はガーベジコレクションです。
- 根拠:ガーベジコレクションはプログラムが不要になったメモリを検出し、再利用可能にする仕組みで、メモリリーク防止に役立ちます。
- 差がつくポイント:スタックやヒープは記憶領域の管理場所であり、フラグメンテーションはメモリの断片化現象であるため、機能としての回収とは異なります。
正解の理由
ア: ガーベジコレクションは、プログラムが動的に確保したメモリのうち、どの変数や参照からもアクセスされなくなった領域を自動的に検出し、解放して再利用可能にします。これにより、メモリリークを防ぎ、効率的なメモリ管理を実現します。
よくある誤解
スタックやヒープはメモリの割り当て場所であり、不要なメモリを自動的に解放する機能ではありません。フラグメンテーションはメモリの断片化現象であり、回収機能とは異なります。
解法ステップ
- 問題文の「どこからも利用できない記憶領域が発生する」とは何かを理解する。
- 「再び利用可能にする機能」が何を指すかを考える。
- 選択肢の意味を整理し、メモリの自動回収機能に該当するものを選ぶ。
- ガーベジコレクションが不要メモリの自動解放機能であることを確認し、正解とする。
選択肢別の誤答解説
- イ: スタック
プログラムの関数呼び出し時に使われるメモリ領域で、LIFO方式で管理されるが、自動回収機能ではない。 - ウ: ヒープ
動的にメモリを割り当てる領域だが、解放はプログラマが行うかガーベジコレクションに依存する。 - エ: フラグメンテーション
メモリの断片化現象であり、メモリ回収の機能ではない。
補足コラム
ガーベジコレクションは主にJavaやC#などの高級言語で採用されており、プログラマがメモリ解放を意識せずに済む利点があります。一方、C言語などでは手動でメモリ解放を行う必要があり、メモリリークのリスクが高まります。
FAQ
Q: ガーベジコレクションはどのように不要なメモリを検出するのですか?
A: 主に参照カウント方式やマーク&スイープ方式などのアルゴリズムで、参照されていないメモリを特定します。
A: 主に参照カウント方式やマーク&スイープ方式などのアルゴリズムで、参照されていないメモリを特定します。
Q: フラグメンテーションはメモリ管理にどんな影響を与えますか?
A: メモリが細かく分断され、大きな連続領域が確保しにくくなり、効率が低下します。
A: メモリが細かく分断され、大きな連続領域が確保しにくくなり、効率が低下します。
関連キーワード: ガーベジコレクション、メモリ管理、動的割当て、メモリリーク、フラグメンテーション

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

