メインメモリ内のデータの配置を整理し、未使用領域が1つの連続的な領域になるようにして、フラグメンテーションを解消することです。
確保と解放が繰り返し行われると、その順序や大きさの傾向(またメモリ管理のアルゴリズム)によっては、メインメモリ上の未使用領域が飛び飛びになるフラグメンテーション(断片化)が発生することがあります。通常、メインメモリに領域を確保するときには連続的な未使用領域が必要であって、飛び飛びになっている未使用領域をかき集めて使うようなことはできないため、フラグメンテーションは致命的な問題になり得ます。
メモリコンパクションは、メインメモリ上にあるデータを隙間なく詰め直し、広大な1つの未使用領域ができるようにします。ただし、C言語のように、メモリアドレスを直接保持するポインタの仕組みがあるプログラミング言語では、実現が困難です(整理されると、メモリアドレスが変わってしまうので)。
処理系やフレームワークなどが行うガーベジコレクションとともに、メモリコンパクションが行われることがあり、メインメモリを整理する機能としてまとめて語られることがありますが、両者が行うことは異なっており、別のものです。
なお、メモリコンパクションと同様のことをストレージで行う場合は、デフラグメンテーションと呼ばれます。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |