ищу решение с общей памятью на основе ОЗУ Windows на C ++

Я столкнулся с ситуацией, когда мне нужно передать до нескольких сотен мегабайт памяти от одного процесса к другому. Прямо сейчас делаю через файлы, и это слишком медленно. Я предполагаю, что для ускорения эти файлы должны быть записаны непосредственно в ОЗУ и доступны из другого процесса. Никакой сложной синхронизации не требуется. Один процесс будет создавать объекты общей памяти и заполнять их данными. Другой процесс прочитает и удалит их. Однако я провел быстрое исследование и, похоже, вы не можете совместно использовать память в ОЗУ в Windows - общая память поддерживается файлом или файлом подкачки. Документы boost :: interprocess подтверждают это. Где тогда ускорение, если реализация с общей памятью по-прежнему использует диск? Есть ли какая-нибудь библиотека C ++, которая использует разделяемую память на основе RAM?

РЕДАКТИРОВАТЬ: Я прочитал еще кое-что: 1. из boost :: interprocess docs: «поскольку операционная система должна синхронизировать содержимое файла с содержимым памяти, файлы с отображением в память работают не так быстро, как совместно используемая память». 2. из http://msdn.microsoft.com/en-us/library/ms810613.aspx : «Файл с отображением памяти также может быть отображен более чем одним приложением одновременно. Это представляет собой единственный механизм для двух или более процессов для прямого обмена данными в Windows NT».

10
задан andriej 2 June 2011 в 09:29
поделиться