Разъяснение по шаблону пула объектов?

У меня сложилось впечатление, что object pool — это шаблон проектирования, используемый для управления группой предварительно выделенных объектов, к которым клиент может запросить и получить один из этих объектов. Однако кажется, что класс object_pool boost.pool больше связан с управлением памятью более низкого уровня, чем с управлением объектами. Почему они использовали это имя, а не что-то вроде memory_pool? У меня неправильное впечатление, что пул объектов boost действительно является схемой объединения памяти? Или они по сути одно и то же? Кроме того, почему не существует стандартной реализации шаблона пула объектов более высокого уровня?


person jwalk    schedule 06.04.2013    source источник
comment
Вы думаете о чем-то вроде распределителя блоков. Это шаблон, который сохраняет некоторые общие свойства объекта инициализированными, так что объект частично создается в пуле? Я думаю, что было бы сложно смоделировать частично сконструированный объект на C++. Как они будут завершены? Хотя вопрос интересный.   -  person artless noise    schedule 06.04.2013
comment
Вы не путаете распределение со строительством?   -  person Yakk - Adam Nevraumont    schedule 06.04.2013
comment
Я предоставил ответ, который, как я считаю, устраняет мое замешательство, хотя не стесняйтесь комментировать, если это звучит так, как будто моя интерпретация реализации boost.pool неверна.   -  person jwalk    schedule 06.04.2013
comment
Привет, спасибо за вопрос. У меня тоже такой же вопрос. мне нужен пул объектов, чтобы я мог повторно использовать объекты. Boost дает что-нибудь в этом направлении? или есть ли какое-либо преимущество в использовании boost::pool по сравнению с простым ручным пулом объектов, который просто повторно использует объекты?   -  person weima    schedule 03.07.2013


Ответы (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 выделяет и управляет базовой памятью желаемого объекта (объектов), предположительно, чтобы повысить производительность кучи с помощью того, что он описывает как Простое раздельное хранилище. На самом деле он не соответствует концепции шаблона пула объектов. . Объяснение различия между двумя шаблонами можно найти в ответе на мой последующий вопрос.

person jwalk    schedule 06.04.2013
comment
Эта концепция очень похожа на распределитель плит/кэш-память. - person artless noise; 11.04.2013