エンベデッドシステムスペシャリスト 2022年 午前2 問08
問題文
プログラム実行時の主記憶管理に関する記述として、適切なものはどれか。
選択肢
ア:主記憶の空き領域を結合して一つの連続した領域にすることを、可変区画方式という。
イ:プログラムが使用しなくなったヒープ領域を回収して再度使用可能にすることを、ガーベジコレクションという。(正解)
ウ:プログラムの実行中に主記憶内でモジュールの格納位置を移動させることを、動的リンキングという。
エ:プログラムの実行中に必要になった時点でモジュールをロードすることを、動的再配置という。
🔒 解説は解答すると表示されます
ガーベジコレクション【午前2解説】
正解の理由
イが適切です。ガーベジコレクション(GC)とは、プログラムが使用しなくなったヒープ領域を回収し、再利用できるようにする仕組みです。
ヒープ領域では、プログラムの実行中に必要に応じてメモリを確保します。確保した領域が不要になったとき、参照されなくなった領域を自動的に回収するのがガーベジコレクションです。
解法ステップ
- 選択肢に出てくる用語が、主記憶管理のどの処理を指すか確認します。
- 「不要になったヒープ領域を回収する」という説明が、ガーベジコレクションの定義に一致することを確認します。
- ほかの選択肢は、処理内容と用語の対応が異なるため除外します。
選択肢別の誤答解説
-
ア:誤り
空き領域を結合し、連続した領域にする処理は、メモリのコンパクションです。可変区画方式は、プログラムの大きさに応じて主記憶を可変長の区画に分けて割り当てる方式です。 -
イ:正しい
使用されなくなったヒープ領域を回収し、再利用可能にする処理はガーベジコレクションです。 -
ウ:誤り
実行中に必要なモジュールを結合・リンクする処理は、動的リンキングです。モジュールの格納位置を移動させる処理ではありません。 -
エ:誤り
必要になった時点でモジュールを主記憶に読み込む処理は、**動的ローディング(動的ロード)**です。動的再配置は、プログラムの配置位置に応じてアドレスなどを調整する処理です。
よくある誤解
-
空き領域をまとめる処理と、不要領域を回収する処理は別です。
ガーベジコレクションは不要になった領域の回収、コンパクションは空き領域の断片化を解消する処理です。 -
「動的」と付く用語を混同しやすいです。
動的ローディングは読み込み、動的リンキングは結合、動的再配置はアドレスの調整を指します。 -
ガーベジコレクションは、ヒープ全体を無条件に消去する処理ではありません。
プログラムから参照されておらず、今後利用されないと判断できる領域を回収します。
補足コラム
主記憶の空き領域が細かく分かれてしまう状態を断片化といいます。コンパクションでは、使用中の領域を移動させて空き領域をまとめ、連続した大きな空き領域を作ります。
一方、ガーベジコレクションは、不要になったヒープ領域を回収する仕組みです。回収した結果、空き領域が増えることはありますが、空き領域を連続させること自体を指す用語ではありません。
FAQ
Q. ガーベジコレクションは、いつ実行されますか?
A. 実行タイミングは処理系によって異なります。空きメモリが少なくなったときなどに実行される方式があります。
A. 実行タイミングは処理系によって異なります。空きメモリが少なくなったときなどに実行される方式があります。
Q. ガーベジコレクションを使えば、メモリ不足は起こりませんか?
A. 起こることがあります。参照が残っている領域は回収できないため、不要なデータへの参照が残り続けると、メモリを有効活用できない場合があります。
A. 起こることがあります。参照が残っている領域は回収できないため、不要なデータへの参照が残り続けると、メモリを有効活用できない場合があります。
関連キーワード: ガーベジコレクション、ヒープ領域、コンパクション、動的ローディング、動的リンキング、動的再配置

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

