Разъяснение по шаблону "пул объектов"?
У меня сложилось впечатление, что object pool
шаблон проектирования, используемый для управления группой предварительно выделенных объектов, к которым клиент может запросить и вернуть один из этих объектов. Тем не менее, кажется, что boost.pool
"s object_pool
Класс больше связан с управлением памятью более низкого уровня, чем с управлением объектами. Почему они пошли с этим именем, в отличие от чего-то вроде memory_pool
? У меня неправильное впечатление, что пул объектов Boost действительно является схемой пула памяти? Или это по сути одно и то же? Кроме того, почему не было стандартной реализации более высокоуровневого шаблона пула объектов?
1 ответ
После прочтения более подробно в 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
выделяет и управляет основной памятью нужного объекта (ов), предположительно, так, чтобы он мог увеличить производительность кучи с помощью того, что он описывает как простое раздельное хранилище. Фактически это не следует этой концепции шаблона пула объектов. Объяснение различия между этими двумя образцами можно найти в ответе на мой следующий вопрос.