Есть ли в std :: pmr или boost распределитель, подходящий для использования в кольцевом / кольцевом буфере, где выделения имеют фиксированный размер? - PullRequest
0 голосов
/ 13 марта 2020

Насколько я понимаю, и boost, и pmr имеют распределитель "bump" , который подходит для многих небольших распределений, когда вы удаляете их все сразу в конце (это на самом деле не беспокоит освобождение, когда вызывается delete, а allo c - это простое приращение указателя, поэтому оно очень быстрое).

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

что-то вроде

block_allocator<4096>// only use this allocator to allocate 4096 bytes, anything smaller or larger will fail.

Другими словами, ему не нужно работать с несколькими size-классами , но он способен обрабатывать 1 миллиард новых / удаляет, если Вы делаете новый новый новый (пример 3 раза), затем удаляете удаляете удаляете, потому что он повторно использует освобожденные блоки (при условии, что у него есть место для выделения 3 блоков).

примечание: я знаю, что некоторые std :: Containers делают не просто выделить T и что этот распределитель не подходит для этого. Я просто хочу использовать это для создания многих unique_ptr<T, alloc<sizeof<T>> (T ctor не выделяет).

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

...