У меня сложилось впечатление, что object pool
— это шаблон проектирования, используемый для управления группой предварительно выделенных объектов, к которым клиент может запросить и получить один из этих объектов. Однако кажется, что класс object_pool
boost.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
выделяет и управляет базовой памятью желаемого объекта (объектов), предположительно, чтобы повысить производительность кучи с помощью того, что он описывает как Простое раздельное хранилище. На самом деле он не соответствует концепции шаблона пула объектов. . Объяснение различия между двумя шаблонами можно найти в ответе на мой последующий вопрос.
boost.pool
неверна. - person jwalk   schedule 06.04.2013boost::pool
по сравнению с простым ручным пулом объектов, который просто повторно использует объекты? - person weima   schedule 03.07.2013