Я хочу указать allocator
для std::map
. Таким образом, написание пользовательского, взяв базовый код от here от Josuttis. Я хочу использовать boost::object_pool
, чтобы получить высокую производительность. Но boost::object_pool
не предоставляет API выделять n
непрерывных элементы, которые требуются интерфейс функцияЧтобы использовать boost :: object_pool для реализации пользовательского распределителя для карты, как выделить n непрерывных элементов с помощью boost :: object_pool?
pointer allocate (size_type num, const void* = 0)
из allocator
.
Как выделить n число непрерывных элементов в boost::objet_pool
? Любой другой пул объектов с открытым исходным кодом обеспечивает такую же функциональность.
Я вижу boost::simple_segregated_storage
имеет интерфейс
void * malloc_n(size_type n, size_type partition_sz);
но
void free_n(void * chunks, size_type n,size_type partition_sz);
требует размера выделенных элементов, и я не думаю, что можно было легко использовать в качестве объекта в пуле.
Хух. Какое решение? Что означает «карта», связанная с вашим вопросом? И, да ** ** курса 'map' не выделяет сразу несколько узлов (это основано на узлах, и правила недействительности итератора/ссылки подразумевают, что это не должно, если вы не хотите рисковать сценариями плохой фрагментации, aka утечки ресурсов) – sehe
@sehe: проблема была, я хотел построить allocater для std :: map, используя boost :: object_pool. но пул форсированных объектов необходим для поддержки непрерывного элемента 'n' no элементов для поддержки стандартного интерфейса распределителя. Но он может быть взломан для 'std :: map', чтобы поддерживать только выделение 1 элемента за раз, поскольку это единственное требование от std :: map к распределителю –