2010-11-08 2 views
2

Мое требование - предоставить файл общей памяти между 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Обмен файлами с памятью между 32-битными и 64-битными процессами

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

Благодаря

+1

Было бы полезно, если вы указали, на какую платформу вы ориентируетесь. У меня такое чувство, что ответ, безусловно, не будет таким же в HP-UX и Windows 2008 R2 .... – Stephane

+0

Вы действительно развиваетесь для HP-UX? Я думал, что он мертв (иш). – MarkR

+0

@Stephane: добавлена ​​mmap (специальная команда платформы), чтобы указать * nix focus. – rwong

ответ

0

Я не пробовал, но я не понимаю, почему вы просто не можете MMAP с MAP_SHARED, и он просто работать.

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

В конце концов, ММАП() не зависит в его последствиях архитектуры (только ее реализация)

Смежные вопросы