Примерно похоже. Изначально весь пул - это один свободный элемент. Выделенная область исключается из списка, возвращаемая склеивается с соседними элементами, если является область получается непрерывной. Посмотрите реализацию pbuf.c как пример работы с блоками фиксированного размера.