Как boost.pool обеспечивает повторное использование выделенной памяти?
Фон
мойпредыдущий вопрос околоboost.pool
побудил меня детально изучить boost.pool, и теперь у меня есть дополнительный вопрос, чтобы завершить мое понимание.
прелюдия
Эта ссылка заявляет следующее о шаблоне пула объектов:
Шаблон пула объектов - это шаблон программного креативного проектирования, который использует набор инициализированных объектов, сохраняемых готовыми к использованию, а не выделяет и уничтожает их по требованию.
Из того, что я могу сказать,boost.pool
(упрощенно) реализует шаблон пула объектов с помощью выделения памяти и управления, в основном на основе размераelement_type
и возвращает простой указатель на выделенный объект:
element_type * malloc();
void free(element_type * p);
Простой пример повышения также показывает, что нет необходимости явноfree
приобретенный элемент:
X * const t = p.malloc();
... // Do something with t; don't take the time to free() it.
Вопрос
Я понимаю, что выделенная память будет безопасно освобождена при уничтожении объекта пула, но как пул узнает, когда блок памяти, полученный клиентом, был освобожден обратно в пул и может использоваться повторно, если его интерфейс возвращает прямой указатель вelement_type
еще звонокfree()
все еще не требуется? как пул буста может повторно использовать эту память, если нет уверенности, что она еще не используется? И если он не использует эту память повторно, считается ли это тем же шаблоном, который описан в вики-справке?