リンカ・ローダと実行形式
mallocとfreeを繰り返すうちに、空きメモリの合計は十分あるのに、大きな領域をまとめて確保できなくなることがある。この現象を何と呼ぶか。
- Aメモリリーク
- B断片化(フラグメンテーション)
- Cスタックオーバーフロー
答えと解説を見る
正解:B. 断片化(フラグメンテーション)
大きさの違う領域の確保と解放を繰り返すと、使用中の領域の間に小さな空きが散らばります。空きの合計は大きくても、つながった大きな空きがないと大きな確保に失敗します。これを断片化と呼びます。メモリの割り当て器は、大きさごとに分けて管理したり、隣り合う空きをまとめたりして断片化を減らします。長く動き続ける組込み機器では特に注意が必要です。
- A. メモリリークは解放し忘れで使えるメモリが減ることです。
- B. 正しい。空きが細かく分かれてしまう状態です。
- C. スタックオーバーフローはスタックの上限を超えることです。