Есть ли способ конвертировать неразделенную память кучи в разделяемую память?Основная цель * nix - PullRequest
1 голос
/ 10 августа 2010

Мне было интересно, есть ли какой-нибудь разумно переносимый способ взять существующую неразделенную память кучи и преобразовать ее в разделяемую память.Случай использования - это блок памяти, который слишком велик для меня, чтобы я захотел скопировать его без необходимости (то есть в новый сегмент совместно используемой памяти), и который распределяется подпрограммами вне моего контроля.Основной целью является * nix / POSIX, но мне также было бы интересно узнать, можно ли это сделать в Windows.

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

Многие * nixe имеют procfs Plan-9, которые позволяют открыть чтение процесса памяти, проверяя / proc / {pid} / mem

Вы указываете другому процессу ваш pid, размер и базовый адрес, и он может просто читать данные (или отображать регион в своем собственном адресном пространстве)

EDIT :: Видимо, вы можете 't open / proc / {pid} / mem без предварительного ptrace (), так что это в основном бесполезно.


В большинстве * никс ptrace(2) позволяет подключаться к процессу и читать его память,


Метод ptrace не работает на OSX, вам нужно больше магии:


Что выв Windows нужна функция ReadProcessMemory.


Поиск в Google «Что такое ReadProcessMemory для $ OSNAME», по-видимому, возвращает исчерпывающие наборы результатов.

0 голосов
/ 10 августа 2010

Вы можете попробовать использовать mmap () с флагом MAP_FIXED и адресом вашей неразделенной памяти (выделенной из кучи). Однако, если вы предоставляете mmap () с собственным указателем, тогда он будет ограничен для выравнивания и размера в соответствии с размером страницы памяти (может запрашиваться sysconf () ) с момента отображения доступно только для всей страницы.

...