Возможность «справиться» с фрагментацией - довольно крутое требование. Если вы имеете в виду, что менеджер должен иметь возможность фрагментировать память, это означает, что у него не может быть стандартного C malloc()
API. Вам нужен косвенный API, в котором на выделение памяти ссылаются не фактические адреса с прямой ссылкой, а что-то более абстрактное.
Это потому, что ваш менеджер памяти должен иметь возможность перемещать выделенные блоки памяти во время дефрагментации, и он не может этого делать, если приложение удерживает прямые абсолютные указатели в выделенной памяти.
Конечно, принуждение приложения к косвенному использованию памяти означает разрыв многих распространенных идиом и API-интерфейсов, так как ожидание свободного использования указателей распространено в C.