Как я могу зарезервировать и выделить общую память без резервной копии файла?Я пытаюсь зарезервировать большой (много десятков ГиБов) кусок общей памяти и использовать его в нескольких процессах в качестве формы IPC.Тем не менее, большая часть этого блока не будет затронута вообще (доступ будет очень редким; возможно, несколько сотен мегабайт на протяжении всего жизненного цикла процессов), и меня не волнуют данные, когда приложения заканчиваются.
Поэтому желательно, чтобы метод для этого имел следующие свойства:
- Не фиксирует весь диапазон.Я выберу, какие части зафиксировать (на самом деле использовать.) (Но шаблон довольно непредсказуемый.)
- Не требуется отображенный в памяти файл или что-то подобное.Мне не нужно сохранять данные.
- Позволяет мне получить доступ к области памяти из нескольких процессов (я буду явно обрабатывать блокировку).
- Работает как в Linux, так и в Windows (очевидно,Требуется 64-битная ОС.)
- На самом деле используется общая память.Мне нужна производительность.
- ( NEW ) ОС или библиотека не пытается инициализировать зарезервированную область (нулю или что-то в этом роде). Это, очевидно, нецелесообразно и не нужно.
Я экспериментировал с boost :: interprocess :: shared_memory_object, но из-за этого в файловой системе создается большой файл (того же размера, что и моя область отображенной памяти.) Он действительно удаляет файлвпоследствии, но это вряд ли поможет.
Любая помощь / совет / указатели / ссылки приветствуются.
PS Я действительно знаю, как сделать это в Windows, используя собственный API.И POSIX, кажется, обладает той же функциональностью (только с более чистым интерфейсом!). Я ищу кроссплатформенный способ здесь.
ОБНОВЛЕНИЕ: Я немного покопался, иоказывается, что поддержка, которая, как я думал, существовала в Windows, была лишь частным случаем файлов с отображением в памяти, используя файл системной страницы в качестве основы.(Я никогда раньше этого не замечал, потому что в прошлых проектах я использовал не более нескольких мегабайт общей памяти.)
Кроме того, теперь у меня есть новое требование (число 6 выше).