>>366
単純な構造で実現しようとするなら、デフラグは出来ない。
なぜなら、デフラグを行うと使用中のメモリ内容が移動してしまい、それに合わせて
プログラム内のすべてのポインタ変数を新しい正しい値に書き換えなければならない。
当然これは無理。せいぜい隣り合った空きエリアをくっつけるだけしかできない。

いまどきのOSは仮想メモリシステムを採用している。OSだけじゃなくチップレベルで
サポートしていたりする。ということは我々がプログラムで使っているポインタ(アドレス)
は仮想のものであり、物理的なメモリ番地とは直結しておらず、対応表を使って対応付
けられているだけ。ということは、物理メモリ上のデータを移動したとしても、それを追随
するように仮想アドレスと物理アドレスの対応表を書き換えるれば、あたかもデータの
移動は発生していないかのように見える。仮想メモリシステムの上でならメモリのデフラ
グも可能になる。

具体的には仮想メモリシステムの実装を調べてくれ。簡単な話じゃないよ。