最終更新日:2026年10月7日
fe fe-technology software
まず結論
フラグメンテーションは、メモリを使う過程で無駄な領域が生じる現象です。
FEでは、まず次の2種類を区別します。
内部フラグメンテーション
→ 確保した領域の「中」に無駄ができる
外部フラグメンテーション
→ 確保した領域の「間」に細かな空きができる
そして、外部フラグメンテーションで散らばった空き領域をまとめる操作がメモリコンパクションです。
直感的な説明
外部フラグメンテーションは、空いている席がたくさんあるのに、まとまった席がない状態に似ています。
使用中 | 空き | 使用中 | 空き | 使用中 | 空き
2MB 3MB 4MB
空きは合計9MB
でも9MB連続した場所はない
そこで、使用中の領域を移動して詰めます。
使用中 | 使用中 | 使用中 | 空き 9MB
↑
コンパクション後
つまり、
散らばった空きを
→ 詰めて
→ 大きな連続した空きにする
= メモリコンパクション
と考えると覚えやすくなります。
定義・仕組み
外部フラグメンテーション
可変長の領域を確保・解放していると、使用中領域の間に小さな空き領域が残ることがあります。
確保 → 解放 → 確保 → 解放
↓
空き領域が細切れになる
空き容量の合計が十分でも、必要な大きさの連続領域がなければ割り当てられないことがあります。
メモリコンパクション
メモリコンパクションは、使用中の領域を移動して一方へ詰め、散在する空き領域を連続した大きな空き領域へまとめる方法です。
Before
[A][空][B][空空][C][空]
After
[A][B][C][空空空空]
外部フラグメンテーションを改善できますが、使用中データを移動する処理が必要なので、処理コストがかかる点にも注意します。
内部フラグメンテーション
内部フラグメンテーションは、割り当てた領域の中に使われない部分が残る現象です。
例えば4KB単位でしか割り当てられないとき、3KB必要な処理に4KBを割り当てると1KB余ります。
割当て 4KB
┌────────────┐
│ 使用 3KB │ 空き1KB │
└────────────┘
↑
割当て領域の内部
この無駄は領域同士の「間」が散らばっている問題ではないため、コンパクションで空きを寄せても解決しません。
ページングとの関係
ページング方式では、仮想記憶を固定長のページ、主記憶を同じ大きさのページフレームに分けます。
可変長の連続領域
→ 外部フラグメンテーションが起こりやすい
固定長のページ / ページフレーム
→ 離れたフレームにも配置できる
→ 外部フラグメンテーションを避けやすい
ただし固定長単位で割り当てるため、最後のページなどに未使用部分が残り、内部フラグメンテーションが生じることがあります。
仮想記憶全体の考え方は仮想記憶で確認できます。
科目Aでどう出る?
問題文では、無駄な領域がどこにあるかを見るのが最初の判断ポイントです。
| 問題文 | 判断 |
|---|---|
| 割当て領域の中に未使用部分 | 内部フラグメンテーション |
| 使用領域の間に小さな空きが散在 | 外部フラグメンテーション |
| 散在した空きを一つにまとめる | メモリコンパクション |
| 固定長のページとページフレーム | ページング |
特に、
空き容量の合計は十分
しかし連続した空き領域が足りない
という説明は、外部フラグメンテーションを疑います。
どんな場面で使う?
主記憶へ可変長の領域を割り当てる方式では、確保と解放を繰り返すほど空き領域が散らばる可能性があります。
このとき、
外部フラグメンテーションが発生
↓
コンパクション
↓
使用中領域を詰める
↓
連続した空き領域を作る
という流れで理解します。
一方、ページングでは連続した物理領域へ置く必要がないため、外部フラグメンテーションへの考え方が変わります。
よくある誤解・混同
コンパクションは内部フラグメンテーションも解消する
違います。
外部フラグメンテーション
→ 空きが散在
→ コンパクションが有効
内部フラグメンテーション
→ 割当て領域内部の余り
→ コンパクションでは解消しない
空き容量の合計が十分なら必ず割り当てられる
連続領域が必要な方式では、そうとは限りません。合計容量ではなく、必要な大きさの連続領域があるかが問題になります。
コンパクションとページングは同じ対策
違います。コンパクションは配置済み領域を移動して空きをまとめる方法です。ページングは固定長単位に分け、離れた物理領域にも配置できるようにする記憶管理方式です。
まとめ(試験直前用)
- フラグメンテーションは、メモリ利用によって無駄な領域が生じる現象
- 内部:割当て領域の中に無駄ができる
- 外部:使用領域の間に空きが散らばる
- メモリコンパクション:使用中領域を移動し、散在した空きをまとめる
- コンパクションは主に外部フラグメンテーションへの対策
- ページングは外部フラグメンテーションを避けやすいが、内部フラグメンテーションは起こり得る