Совместное использование файлов с отображением памяти между 32-битными и 64-битными процессами

Мое требование - предоставить файл с общей памятью между 32-битными и 64-битными процессами. Этот файл может быть создан любым процессом, в зависимости от того, кто идет первым. - Я до сих пор не уверен, возможно ли это, и если да, то какие подводные камни позже? - некоторая информация, полученная от Google: Файлы с отображением в память 32-разрядные приложения могут использовать только файлы с отображением в памяти, которые отображаются в 32-разрядное виртуальное адресное пространство. 64-битные приложения могут совместно использовать файлы с отображением памяти в 32-битном или 64-битном виртуальном адресном пространстве. Чтобы отобразить файл в память, которая совместно используется 64-битными и 32-битными приложениями, ваше 64-битное приложение должно указать флаг MAP_ADDR32 с флагом MAP_SHARED при вызове mmap (2). URL: http://docs.hp.com/en/5966-9844/ch02s08.html#d0e3037

Означает ли это, что для этого типа совместного использования файлы с отображением памяти должны создаваться 64-битным процессом с использованием заданных флагов?

Спасибо


person Vineet    schedule 08.11.2010    source источник
comment
Было бы полезно, если бы вы указали, на какую платформу вы ориентируетесь. У меня такое чувство, что ответ точно не будет таким же под HP-UX и Windows 2008 R2 ....   -  person Stephane    schedule 08.11.2010
comment
Вы действительно разрабатываете для HP-UX? Я думал, что он мертв (иш).   -  person MarkR    schedule 08.11.2010
comment
@Stephane: добавлен mmap (специфичная для платформы команда) для указания фокуса * nix.   -  person rwong    schedule 25.09.2012


Ответы (1)


Я не пробовал, но не понимаю, почему вы просто не можете mmap с MAP_SHARED, и он ПРОСТО РАБОТАЕТ.

При условии, что вам не нужен один сегмент, который слишком велик для адресного пространства 32-битного процесса (с учетом фрагментации), и вы не хотите, чтобы он отображался по одному и тому же адресу в обоих процессах (что может быть невозможно) , он должен просто работать.

В конце концов, mmap () не зависит от архитектуры по своим эффектам (только его реализация)

person MarkR    schedule 08.11.2010