У меня сложилось впечатление, что object pool
шаблон проектирования, используемый для управления группой предварительно выделенных объектов, к которым клиент может запросить и вернуть один из этих объектов. Тем не менее, кажется, что boost.pool
«s object_pool
Класс больше связан с управлением памятью более низкого уровня, чем с управлением объектами. Почему они пошли с этим именем, в отличие от чего-то вроде memory_pool
? У меня неправильное впечатление, что пул объектов Boost действительно является схемой пула памяти? Или они по сути одно и то же? Кроме того, почему не было стандартной реализации более высокоуровневого шаблона пула объектов?
После прочтения более подробно в boost.pool
документация, я думаю, я понимаю мое замешательство. Я привык думать о пуле объектов, реализованном как класс, который выделяет и управляет набором непосредственный объекты. Рассматривать,
template<class T>
class object_pool {
private:
std::list<T*> m_reserved; // holds onto any objects that have been allocated
public
T *acquire() { /* grabs from reserved list */ }
};
Тем не менее, похоже boost.pool
реализует другую концепцию пула объектов, которая используется для совершенно другой цели, чем предложенная выше. boost.pool
распределяет и управляет основная память желаемого объекта (ов), предположительно так, чтобы он мог увеличить производительность кучи посредством того, что он описывает как Простое сегрегированное хранилище. Это на самом деле не следовать эта концепция шаблона пула объектов. Объяснение различия между этими двумя образцами можно найти в ответе на мой последующий вопрос.
Других решений пока нет …