boost :: межпроцессное распределение памяти на анонимном сегменте - PullRequest
7 голосов
/ 16 августа 2011

Я пытаюсь использовать mmap-подобный сегмент для выделения объектов в контейнерах stl, для этого я использую boost :: interprocess, который обеспечивает отображение памяти, распределители и поддержку анонимного отображения памяти.
Немного похоже this

Моя проблема в том, что функция anonymous_shared_memory здесь возвращает что-то, что выглядит наполовину сопоставленным файлом и наполовину разделяемой памятью (имеет смысл с mmap :)) и хотяоба стиля работают с межпроцессными распределителями , этот выглядит как пропущенный сегмент_manager, который выполняет фактическое выделение чанка.
Поскольку он возвращает высокоуровневый mapped_region, уже отображенный в процессе, но без менеджера ия никак не могу понять, как подключить segment_manager.

1 Ответ

3 голосов
/ 22 августа 2011

A mapped_region - это объект низкого и среднего уровня, который буквально представляет только память. Управляемая общая память , однако

- это расширенный класс, который объединяет объект общей памяти и сопоставленную область, которая покрывает весь объект общей памяти,

так что управляемая память обладает segment_manager.

Учитывая, что вы хотите использовать anonymous_shared_memory, сначала вы получите memory_region в соответствии с примером, затем вы будете использовать размещение new, чтобы поставить segment_manager в в начале этого Его конструктор принимает размер сегмента памяти, в котором он создается. Я не знаю, включает ли он размер менеджера, хотя я подозреваю, что он включен.

...