C ++ STL-совместимые распределители - PullRequest
5 голосов
/ 04 апреля 2010

Какие распределители доступны для использования с STL при работе с небольшими объектами. Я уже пробовал играть с распределителями пула от Boost, но не получил улучшения производительности (на самом деле, в некоторых случаях произошло значительное снижение производительности).

Ответы [ 3 ]

3 голосов
/ 04 апреля 2010

Вы не сказали, какой компилятор вы используете, но он, вероятно, поставляется с кучей предварительно собранных распределителей. Это на Mac с gcc 4.2.1 :

~$ find /usr/include/c++/4.2.1/ -name "*allocator*"
/usr/include/c++/4.2.1/bits/allocator.h
/usr/include/c++/4.2.1/ext/array_allocator.h
/usr/include/c++/4.2.1/ext/bitmap_allocator.h
/usr/include/c++/4.2.1/ext/debug_allocator.h
/usr/include/c++/4.2.1/ext/malloc_allocator.h
/usr/include/c++/4.2.1/ext/mt_allocator.h
/usr/include/c++/4.2.1/ext/new_allocator.h
/usr/include/c++/4.2.1/ext/pool_allocator.h
/usr/include/c++/4.2.1/ext/throw_allocator.h

Вот также ссылка на страницу проекта BitMagic , в которой рассказывается о том, как создать свой собственный. Также обратите внимание на средство выделения небольших объектов в библиотеке Loki book тоже).

1 голос
/ 04 апреля 2010

Вам нужен распределитель, который подходит для ваших конкретных потребностей. Универсальный распределитель STL лучше всего подходит для самых разных обстоятельств, и если вам нужен новый распределитель, вам нужно будет профилировать и понимать ваши конкретные требования. Вам нужно будет более точно указать, в какой контейнер вы собираетесь помещать эти объекты.

1 голос
/ 04 апреля 2010

Реализация стандартной библиотеки Microsoft Visual C ++ предоставляет несколько проприетарных распределителей для контейнеров на основе узлов (по крайней мере, в ближайшей к выпуску Visual Studio 2010).

...