Файлы, отображенные в память - отображать структуру, а не файл? - PullRequest
3 голосов
/ 12 января 2012

Я очень новичок в файлах с отображением в память, и я немного потерялся в чем-то.

Я знаю, что если бы у меня был файл, я мог бы загрузить его и получить к нему доступ сразу из разных процессов, используя MMaps.

Но в моей ситуации я создаю DLL-библиотеку, присоединенную к процессу A, и эта DLL-библиотека получила указатель на cSurface, который подготовил процесс A. Мне нужно поделиться этими данными cSurface с процессом B. Я действительно не хочу вызывать пустой MMap и копировать в него поверхность моего процесса A, только чтобы снова скопировать его в процесс B.

Можно ли отобразить мою поверхность так, как если бы это был файл, поэтому MMap уже указывает на данные поверхности при создании (как если бы я загружал SomeTextFile.txt)?

В принципе, мой план состоял бы в том, чтобы получить указатель на поверхность в Proc A, указать окнам разделять память этой поверхности с заданным именем и использовать мьютексы для координации доступа - идея состоит в том, что оба процесса читают одинаково физическая копия поверхности без громоздкого копирования.

Это возможно?

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Да, все это есть в документации CreateFileMapping.

Вы можете присвоить файлу, отображенному в памяти, имя.Если другой процесс откроет mmap с тем же именем, он будет указывать на ту же память.Если дескриптор в CreateFileMapping установлен в INVALID_HANDLE_VALUE, он хранит его исключительно в памяти.Проверьте документацию CreateFileMapping

1 голос
/ 14 января 2012

Спасибо за все ваши комментарии.

Я провел дальнейшее исследование и нашел ответ.

Вы можете использовать файлы с отображением в памяти, чтобы поделиться файлом или пустое пространство памяти .Если вы хотите поделиться данными, уже инициализированными в памяти, до настройки карты, вам нужно создать пустую карту и впоследствии скопировать в нее свои данные.

...