Вариантом дизайна было бы написать систему кэширования памяти, лениво создавая память (создавайте по требованию). такой кэш будет иметь набор предварительно выделенных блоков памяти, доступ к которым осуществляется по их размеру. Например, массив из N списков, каждый из которых имеет список M buffers.each, отвечает за перенос памяти в определенном диапазоне размеров. (например, из каждого списка вы получаете память в диапазоне 2 ^ i (i = 0..N-1). даже если вы хотите использовать меньше 2 ^ i, вы просто не используете дополнительную память в буфере ,
это будет компромиссом небольших потерь памяти, кеширования и уменьшения количества сбоев страниц.
другой вариант - использовать nedmalloc
удачи
Лиор