Пул объектов и динамическое распределение - PullRequest
11 голосов
/ 09 августа 2009

Когда следует предпочитать пул объектов динамически размещаемым объектам?

Мне нужно создавать и уничтожать тысячи объектов в секунду. Достаточно ли одного для принятия решения в пользу пула объектов?

Спасибо.

Ответы [ 4 ]

8 голосов
/ 09 августа 2009

Да, этого достаточно, чтобы принять решение в пользу пула объектов.

Документация по цитированию

Когда я должен использовать бассейн?

Бассейны обычно используются, когда есть много распределения и освобождения мелких предметов. Другое распространенное использование ситуация выше, где многие объекты могут быть удалены из памяти.

См. Boost Pool библиотека

7 голосов
/ 09 августа 2009

Мера, мера, мера. Тогда вы будете знать , и вам не придется полагаться на предположения или руководящие принципы.

Кроме того, если Дирк Грюнвальд CustomMalloc все еще доступен, попробуйте. Он синтезирует реализацию malloc, которая настроена на потребности одного приложения.

7 голосов
/ 09 августа 2009

Ожидаемая стоимость разрушения объекта, освобождения, размещения и строительства выше, чем стоимость повторной инициализации для нового использования.

3 голосов
/ 09 августа 2009

Как правило, если вы создаете и уничтожаете тысячи объектов в секунду, вы должны по крайней мере использовать пул объектов.

Вы можете использовать пользовательский распределитель, который просто выделяет объекты определенного размера. Переопределите new и предварительно выделите кучу специально для ваших объектов. Использование битового поля и массива относительно просто.

Как правило, настраиваемая куча более эффективна в отношении памяти, если объекты маленькие (накладные расходы кучи довольно велики по сравнению с размером небольших объектов); Это быстрее; Предотвращает фрагментацию кучи; И его легче отлаживать.

...