メモリコンパクション【memory compaction】
概要
メモリコンパクションとは、オペレーティングシステム(OS)などがメインメモリ(RAM)を管理する機能の一つで、断片化によって分散した空き領域を移動・統合し、連続した広い空き領域に再編する処理のこと。動的なメモリ割り当てが行われる環境で行われる。

プログラムを長時間実行すると、コードやデータの配置と破棄のためにメモリ領域の確保と解放が繰り返され、使用中の領域と空き領域が交互に並ぶようになる。これにより、小さな空き領域が飛び飛びの場所に点在する「メモリ断片化」(フラグメンテーション)という現象が起きる。断片化が進むと、空き領域の総量自体は十分でも、一つのプログラムが必要とする連続した広い領域を確保できなくなる場合がある。
メモリコンパクションが実行されると、OSは稼働中のプログラムを一時的に停止し、使用中の各領域を別の場所へ移動させて隙間なく詰め直す。これにより、散らばっていた空き領域が一方に集約され、単一の広大な空き領域が作り出される。処理中はメモリアドレスの再配置やページテーブルの更新が行われ、メモリ管理ユニットが仮想アドレスと物理アドレスの対応を保つことで、アプリケーション側からの参照には影響が及ばないようになっている。
似た仕組みに「ガーベジコレクション」(garbage collection)がある。これは稼働中のプログラムが確保した領域のうち、既に使われなくなったと判断されるものを自動的に解放し、空き領域そのものを増やす処理である。多くのプログラミング言語の実行環境では、両者を組み合わせて実装し、不要な領域を解放した直後に断片化を解消する構成も採用されている。なお、ストレージ(外部記憶装置)における同様の処理で、ファイルや空き領域の記録位置を再編して断片化を解消する処理は「デフラグメンテーション」(defragmentation)と呼ばれる。
(2026.6.19更新)