Вот моя проблема: мне нужно управлять памятью в удаленном непрерывном буфере, который моя программа не может читать или писать. Он должен иметь семантику malloc()/free() и поддерживать минимальное выравнивание и предотвращение фрагментации (по возможности). Поскольку я не могу напрямую читать или писать в этот буфер, мне нужно использовать локальные структуры для управления всеми выделениями.
Я уже использую boost, поэтому, если что-то внутри boost можно массировать, чтобы сделать это, это было бы здорово. Однако я не прочь использовать библиотеку C или что-то в этом роде.
В качестве примера мне нужна версия, отличная от IPC:
boost::interprocess::basic_managed_external_buffer<
char,
boost::interprocess::rbtree_best_fit<
boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void>,
SOME_ALIGNMENT>,
boost::interprocess::iset_index>
предпочтительно с malloc/free semantics вместо new/delete но без его вечного чтения или записи в базовый буфер (и сохранение всей информации о распределении/структурах данных в отдельном буфере).
Любые идеи?
P.S. Я не хочу, чтобы пример boost:: interprocess вводил в заблуждение, я просто знаком с интерфейсом, поэтому использую его в качестве примера. Приложение не является interprocess, и распределитель будет использоваться только из моего приложения.
В частности, я хотел бы иметь возможность управлять внешним 16-гигабайтным буфером с размерами размещения от 128 байтов вплоть до 512 МБ. Это строго 64-разрядный код, но даже тогда я бы предпочел, чтобы тип указателя был параметром шаблона, поэтому я могу явно использовать uint64_t.