"абстрактная" библиотека управления/распределения памяти slab/arena

Меня интересует библиотека для управления выделением и освобождением памяти в абстрактной плите. То есть библиотека, которая не использует malloc()/ operator new/ sbrk, но изначально получает непрерывный диапазон адресов (может быть, я задал для нее функцию malloc() или, может быть, она управляет пространством на каком-то удаленном устройстве), но берет выделение и удаление. Запросы на выделение и возвращаемые регионы внутри плиты. Код управления памятью также не имеет доступа к памяти, которой он управляет; он не знает, что это за память, поэтому он не может делать такие вещи, как запись в нее или перемещение ее частей в другое место и т. д.

Требования:

  • Бесплатно
  • Бесплатный и с открытым исходным кодом
  • Есть некоторая документация
  • Обратите внимание, что механизм распределения не может использовать плиту/арену для хранения какого-либо состояния (счетчиков, указателей и т. д.); он может использовать распределитель по умолчанию (например, malloc()/new) или какой-либо другой механизм для этого.

Предпочтения:

  • Привязки C или C++
  • Написан на современном C++.
  • Поддерживает предполагаемое/временное распределение («Мне нужно X байтов между абстрактной точкой времени t_1 и абстрактной точкой времени t_2»; это допускает избыточное распределение во всех единицах времени, если нет избыточного распределения в отдельной единице времени. .)
  • Поддерживает указание требований к выравниванию
  • Поддерживает изменение размера лучше, чем выделение нового сегмента и освобождение старого.
  • Активно поддерживается

Ответы (1)

Взгляните на библиотеку boost pool , которая представляет собой библиотеку C++, в которой есть большинство функций, которые вы ищете. Это часть библиотеки boost с открытым исходным кодом, хорошо поддерживаемой и протестированной портативной библиотекой.

В подробной документации о пуле подробно рассказывается, как обрабатывается сегментация и выделение памяти. Это очень хорошо документировано с обширными тестовыми примерами.

Глядя на документацию для этого, кажется, что пул Boost использует плиту/арену для хранения состояния, так что это не соответствует моим критериям. Я отредактировал, чтобы сделать это более ясным.