2014-09-27 5 views
0

Если мое приложение динамически выделяет и освобождает память много раз, каждый раз для объектов одного размера; имеет смысл обертывать malloc и free с кешем выделенной памяти для повышения производительности? или это уже делают реализации mallocs?Улучшения производительности кэшированных malloc

+2

Вы говорите о пуле * памяти *. 'malloc' уже реализует один под капотом. Можно написать свой собственный, который лучше подходит для конкретных случаев использования, но если вы не знаете, что делаете, вам лучше полагаться на значение по умолчанию. Профилировали ли вы свой код, чтобы определить это как проблему? –

+0

@OliverCharlesworth Пока нет, у меня есть некоторые проблемы с доступом к кластеру, который я использую, и я должен ждать, чтобы сделать это. Кстати, я сначала пытаюсь выяснить, в чем проблема. Я выделяю миллионы дескрипторов, у которых средний срок службы составляет 2,5 года. Но в среднем держать пул в 10000 должен работать. Я думал, стоит ли его реализовать, бесполезно, потому что уже реализовано. – Otrebor

+0

Часто рекомендуется избегать выделения памяти, где бы вы ни находились, прежде чем начинать увлекаться тем, как распределяется память. – tmyklebu

ответ

0

Класс boost::pool, который может сделать это за вас.

Другим более быстрым и простым способом является использование альтернативной библиотеки malloc от TBB (tbbmalloc) или Google malloc (tcmalloc). Оба они намного быстрее, чем стандартный malloc, и требуется только привязка к библиотеке, поэтому требуется изменение кода.

Я использовал tbbmalloc и получил массивное усиление 2x в нескольких приложениях.

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