Когда можно использовать неименованную общую память? - PullRequest
3 голосов
/ 18 ноября 2010

Когда вы решите использовать неназванную общую память в Windows?

мне кажется, что передача сообщений между потоками не очень полезна.Вместо этого можно передать указатель на структуру / переменную рабочим потокам и использовать ее вместо общей памяти вместо вызова системного вызова CreateFileMapping.

Ответы [ 3 ]

3 голосов
/ 18 ноября 2010

Вы можете передавать дескрипторы неназванным объектам через границы процесса. Другими словами, вы можете создать неназванную карту памяти в вашем приложении и получить к ней доступ из другого без , используя имя!

Посмотрите на вызов DuplicateHandle, который можно использовать для передачи дескрипторов неназванным объектам через границы процесса.

3 голосов
/ 18 ноября 2010

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

  • любой процесс, который знает имя и имеет достаточный доступ для создания сопоставленного файла, может сесть на корточки на вашем именованном объекте, препятствуя или мешая его законному использованию - это допускает отказ в обслуживанииатака.
  • случайные, а не злонамеренные конфликты имен.

Если вы не используете имя, вы можете быть уверены, что только процессы, к которым вы хотите иметь доступ, получат его.Из документов MSDN для CreateFileMapping :

Один объект сопоставления файлов может совместно использоваться несколькими процессами посредством наследования дескриптора при создании процесса, дублирования дескриптора или открытия сопоставления файлаобъект по имени.

3 голосов
/ 18 ноября 2010

Объекты секций (также называемые «объектами сопоставления файлов») используются не только для разделения памяти между процессами.Наиболее очевидное использование объектов сечения - это отображение в файле для ввода-вывода, и в большинстве случаев присвоение имен объектам не очень полезно.Для безымянных разделов на основе файла подкачки («разделяемая память») вы все равно можете заставить дочерние процессы наследовать дескриптор, чтобы они могли использовать разделы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...