Я тут по теме особо трепаться не стану.

Освобождать память проще, чем её выделять. Достаточно пометить блок свободным и проверить, что соседние блоки заняты.

Если они свободны, то объединить.

Объединяемся для свободы!