Задумался я, а почему бы не выделять память всегда только равными блоками, кратными, например, 4096 (2 в степени 12), 8192 (удвоенное значение 4096), 16384 (утроенное) и т.д. Garbage collector'у ведь удобнее будет работать? Полез в интернеты, а там уже всё придумано. =)
Управление памятью в C++ http://habrahabr.ru/post/148657/
и до кучи - организация объектов так, чтобы у него был один владелец, при удалении которого уничтожаются
все подчиненные объекты, что позволяет ликвидировать утечки памяти:
GC в C++: преодоление соблазна http://habrahabr.ru/post/148242/
Как продеть слона через игольное ушко.
Обработка максимальных объемов данных за минимальное время
http://habrahabr.ru/company/xakep/blog/258961/