Подтвердить что ты не робот

Вы когда-либо получали значительное ускорение, используя boost:: pool?

Я играл с boost:: pool несколько раз в тех местах, где мне казалось, что я серьезно забиваю кучу с большим количеством объекта "оттока". Обычно я использовал boost::object_pool или boost::pool_alloc в качестве параметра шаблона STL. Однако результат неизменно показывает, что производительность практически не изменилась или значительно ухудшилась.

Мне любопытно услышать о каких-либо успехах.

Какие вещи я должен искать в профилировании вывода, который может указывать на boost:: pool, вероятно, поможет?

На самом деле довольно сложно улучшить хороший старый malloc?

4b9b3361

Ответ 1

Пулы памяти наиболее эффективны для обработки стиля транзакций, где вы можете выделить пул, а затем, когда транзакция будет выполнена, просто выгрузите ее в забвение. Реальная скорость не в том, что каждое распределение будет намного быстрее, чем у вас будет почти нулевая фрагментация памяти в чрезвычайно продолжительном приложении.

В сортировке это звучит так, как будто ваши приложения не требуют использования пулов памяти.

Ответ 2

Да, увеличение скорости на 500%. Приложение (довольно глупо, но иногда вам нужно работать с тем, что вы получили) скопировали элементы из 1 std:: map в другую в цикле (в цикле было какое-то принятие решений) и результирующие распределения на многопоточных/обрабатывающих серверах привели к развалу кучи. Я добавил добавочный пул в качестве распределителя на вторую карту, и результат был на 500% выше скорости выполнения приложений.

Ответ 3

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

http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html

Гаэтано

Ответ 4

Возможно, вам захочется отследить ваши проблемы с производительностью до распределения памяти, прежде чем вы начнете оптимизировать для этого.

Итак, сузите профилирование, чтобы определить местоположение проблемы. Это может быть много вызовов одного и того же кода, которые могут не занимать много времени, когда вызывается только один раз.