基本情報技術者 2013年 秋期 午前(科目A) 問17
問題文
メモリリークの説明として、適切なものはどれか。
選択肢
ア:OSやアプリケーションのバグなどが原因で、動作中に確保した主記憶が解放されないことであり、これが発生すると主記憶中の利用可能な部分が減少する。(正解)
イ:アプリケーションの同時実行数を増やした場合に、主記憶容量が不足し、処理時間のほとんどがページングに費やされ、スループットの極端な低下を招くことである。
ウ:実行時のプログラム領域の大きさに制限があるときに、必要になったモジュールを主記憶に取り込む手法である。
エ:主記憶で利用可能な空き領域の総量は足りているのに、主記憶中に不連続で散在しているので、大きなプログラムをロードする領域が確保できないことである。
メモリリークの説明として、適切なものはどれか。【午前2 解説】
要点まとめ
- 結論:メモリリークはプログラムやOSのバグで確保した主記憶が解放されず、長時間稼働で利用可能領域を徐々に減少させる現象です。
- 根拠:選択肢アは「解放されない」という決定的な語を含み、他選択肢はページング増加や動的ロード、断片化など別概念を示しています。
- 差がつくポイント:問題文の「解放されない」「動作中に確保した主記憶」に注目し、スラッシングや外部断片化と混同しないことが合格の鍵です。
正解の理由
正解は ア: OSやアプリケーションのバグなどが原因で、動作中に確保した主記憶が解放されないことであり、これが発生すると主記憶中の利用可能な部分が減少する。 です。
メモリリークの本質は「確保したメモリが解放されずに使えなくなること」であり、選択肢アはこの定義を直接的に述べています。長時間稼働するプロセスで徐々に利用可能メモリが減る点も典型的な影響です。
メモリリークの本質は「確保したメモリが解放されずに使えなくなること」であり、選択肢アはこの定義を直接的に述べています。長時間稼働するプロセスで徐々に利用可能メモリが減る点も典型的な影響です。
よくある誤解
- 「ページングやスワップによる性能低下(スラッシング)と混同する」:ページングはメモリ不足でページング活動が増大する現象で、確保済みメモリが解放されないという説明とは異なります。
- 「断片化(外部断片化)と同一視する」:断片化は空き領域が分散して大きな連続領域が確保できない問題で、メモリが使えなくなる点は似るが原因は異なります。
- 「ガベージコレクションがあれば完全に防げる」と考える誤解:GCのある言語でも不要な参照を保持すると論理的にリークが発生します(例:大きなキャッシュを解放しない等)。
解法ステップ
- 設問のキーワードを確認:「解放されない」「減少」などがあるかを探す。
- 各選択肢と用語を対応付ける:メモリリーク、スラッシング、動的ロード、外部断片化など。
- 定義と照合して最も符合する選択肢を選ぶ:メモリが「解放されない」を明示するものが正解。
- 迷ったら選択肢の結果(メモリが減るのか、ページングが増えるのか、ロードの手法か)で切り分ける。
選択肢別の誤答解説
- ア: 正解。確保した主記憶が解放されず利用可能量が減少する点を正確に表現しています。メモリリークの定義通りです。
- イ: 誤り。これはスラッシング(paging thrash)を説明しています。主記憶容量不足によりページングが頻発しスループットが低下する現象で、メモリが「解放されない」こととは別です。
- ウ: 誤り。これは必要になったモジュールを実行時に取り込む「遅延ロード(demand loading)」や動的リンクに近い説明で、メモリリークではありません。
- エ: 誤り。これは外部断片化(large contiguous block が取れない)を指す説明で、空き総量はあるが連続空間が確保できない点が特徴です。メモリが解放されないという点は含みません。
補足コラム
- 発生原因の例:C/C++でのfree忘れ、ハンドルや配列参照を残すロジックミス、サードパーティライブラリのバグなど。
- 検出ツール:Valgrind、AddressSanitizer、LeakSanitizer、プロファイラやメモリヒープダンプ解析が有効です。
- 対策:RAIIやスマートポインタの利用、明確な所有権設計、定期的なリソース監視と負荷試験、GC付き言語でも参照管理を徹底することが重要です。
FAQ
Q1: ガベージコレクションのある言語でもメモリリークは起きますか?
A1: はい。不要な参照を保持するとGCが回収できず論理的なリークが発生します(キャッシュやコレクションの参照忘れ等)。
A1: はい。不要な参照を保持するとGCが回収できず論理的なリークが発生します(キャッシュやコレクションの参照忘れ等)。
Q2: メモリリークとスラッシングの見分け方は?
A2: リークは利用可能メモリが徐々に減少する一方、スラッシングはページフォールトやI/Oが急増してCPU利用率が低下する特徴があります。ログ・メトリクスで判別可能です。
A2: リークは利用可能メモリが徐々に減少する一方、スラッシングはページフォールトやI/Oが急増してCPU利用率が低下する特徴があります。ログ・メトリクスで判別可能です。
Q3: 試験で迷ったときの速い切り分けは?
A3: 「解放されない」「ページングが増える」「ロードする手法」「断片化」の語句を基準に、該当する語句がある選択肢を選びましょう。
A3: 「解放されない」「ページングが増える」「ロードする手法」「断片化」の語句を基準に、該当する語句がある選択肢を選びましょう。
関連キーワード: メモリリーク、スラッシング、ページング、外部断片化、ガベージコレクション、メモリデバッグ、主記憶、遅延ロード、リーク検出

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

