Когда нужно отдавать предпочтение пулу объектов над динамически выделенными объектами?
Мне нужно создавать и уничтожать тысячи объектов в секунду. Это само по себе достаточно, чтобы принять решение в пользу пула объектов?
Спасибо.
Когда нужно отдавать предпочтение пулу объектов над динамически выделенными объектами?
Мне нужно создавать и уничтожать тысячи объектов в секунду. Это само по себе достаточно, чтобы принять решение в пользу пула объектов?
Спасибо.
Да, этого достаточно, чтобы принять решение в пользу пула объектов.
Документация по котировке Boost
Когда я должен использовать Pool?
Бассейны обычно используются, когда есть много распределения и освобождения малых объектов. Другое распространенное использование это ситуация выше, где многие объекты могут выпадать из памяти.
Ожидаемая стоимость разрушения объекта, освобождения, распределения и строительства выше, чем стоимость повторной инициализации для нового использования.
Измерение, измерение, измерение. Тогда вы узнаете, и вам не придется полагаться на спекуляции или рекомендации.
Кроме того, если Dirk Grunwald CustomMalloc по-прежнему доступен, попробуйте. Он синтезирует реализацию malloc
, которая настроена на потребности одного приложения.
Как правило, если вы создаете и уничтожаете тысячи объектов в секунду, вы должны хотя бы использовать пул объектов.
Вы можете использовать пользовательский распределитель, который просто выделяет объекты определенного размера. Переопределите новую и предварительно выделите кучу специально для ваших объектов. Использование битового поля и массива относительно просто.
В принципе, пользовательская куча более эффективна с точки зрения памяти, если объекты небольшие (накладные расходы кучи довольно высокие относительно размера небольших объектов); Его быстрее; Это предотвращает фрагментацию кучи; И его легче отлаживать.