Пул объектов по сравнению с динамическим распределением

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

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

Спасибо.

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

Кроме того, если Dirk Grunwald CustomMalloc по-прежнему доступен, попробуйте. Он синтезирует реализацию malloc, которая настроена на потребности одного приложения.

Ответ 4

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

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

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