Я хотел бы использовать некоторое управление памятью, совместимое с C++ std, в виде класса, производного от std::allocator
, но в состоянии выделить куски памяти и освободить &, освободив их в меньших частях. Я только нашел boost :: pool, но это не соответствует std в вышеупомянутом смысле. Есть ли что-нибудь более полезное, или я должен сам это кодировать?Какие C++-совместимые пользовательские распределители доступны?
(Обратите внимание, что std::allocator
часто бесполезен для выделения много мелких объектов, то есть при использовании std::list
.)
РЕДАКТИРОВАТЬ для уточнения.
Скажет, я хочу использовать std::list
из множества мелких объектов, а затем реализации std::allocator
, которые выделяют каждый объект с помощью ::new
вызывает значительные накладные расходы во время выполнения (но и память, я думаю). Гораздо эффективнее выделять большие куски объектов и раздавать их один за другим. Для этого мне нужен std
-совместимый распределитель (он не должен быть получен из std::allocator
, но должен реализовывать ту же концепцию), который может быть использован с любым контейнером библиотеки std
и обеспечивает необходимое управление памятью, в идеале позволяющее мне рассказать об этом сколько объектов я могу выделить отдельно.
В чем проблема с распределителями Boost.Pool? Почему вы говорите, что они не соответствуют стандарту? – interjay
Просьба указать, есть ли у вас какие-либо особые требования к распределению/бесплатно. –
@ Karthik и @interjay Предположим, что я хочу использовать 'std :: list' (как упоминалось в исходном вопросе), но избегайте выделения многих отдельных объектов. – Walter