リンカ・ローダと実行形式

mallocとfreeを繰り返すうちに、空きメモリの合計は十分あるのに、大きな領域をまとめて確保できなくなることがある。この現象を何と呼ぶか。

  1. Aメモリリーク
  2. B断片化(フラグメンテーション)
  3. Cスタックオーバーフロー
答えと解説を見る

正解:B. 断片化(フラグメンテーション)

大きさの違う領域の確保と解放を繰り返すと、使用中の領域の間に小さな空きが散らばります。空きの合計は大きくても、つながった大きな空きがないと大きな確保に失敗します。これを断片化と呼びます。メモリの割り当て器は、大きさごとに分けて管理したり、隣り合う空きをまとめたりして断片化を減らします。長く動き続ける組込み機器では特に注意が必要です。

  • A. メモリリークは解放し忘れで使えるメモリが減ることです。
  • B. 正しい。空きが細かく分かれてしまう状態です。
  • C. スタックオーバーフローはスタックの上限を超えることです。
この分野を解く 分野ページへ

リンカ・ローダと実行形式のほかの問題

  1. 共有ライブラリを作るとき、外から使う関数だけを公開し、内部の関数はシンボルの可視性(visibility)を「hidden」にする利点として正しいものはどれか。
  2. C++でグローバルなオブジェクトのコンストラクタがmainより前に実行されるしくみとして正しいものはどれか。
  3. コンパイラが1つのソースファイルから出力するオブジェクトファイル(.o)について正しいものはどれか。
  4. リンカの主な役割として正しいものはどれか。
  5. リンカが行うシンボル解決の説明として正しいものはどれか。