2013-04-06 4 views
4

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

+1

Вы думаете о чем-то вроде [распределителя плиты] (http://en.wikipedia.org/wiki/Slab_allocation). Это шаблон, который сохраняет некоторые общие свойства объектов, чтобы объект был частично построен в пуле? Я думаю, что было бы сложно смоделировать * частично * построенный объект в C++. Как они будут * завершены *? Интересный вопрос. –

+0

Вы путаете распределение со строительством? – Yakk

+0

Я предоставил ответ, который, как я считаю, вызывает мое замешательство, хотя не стесняйтесь комментировать, если мне кажется, что моя интерпретация реализации «boost.pool» неверна. – jwalk

ответ

5

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

+1

[Эта концепция] (http://en.wikipedia.org/wiki/Object_pool_pattern) очень похожа на [кластер-распределитель/look-side cache] (http://www.makelinux.net/ldd3/chp-8- раздел-2). –

Смежные вопросы