Моя основная проблема заключается в том, что мне нужно разрешить нескольким процессам ОС обмениваться данными через большую кучу общей памяти, которая сопоставлена с одинаковыми диапазонами адресов во всех процессах. (Чтобы убедиться, что значения указателя действительно значимы.)
Теперь я сталкиваюсь с проблемой, что часть программы / библиотеки использует стандартный malloc / free, и мне кажется, что базовая реализация не учитывает отображения, которые я создаю с помощью mmap.
Или другой вариант - я создаю отображения в регионах, которые malloc уже планировал использовать.
К сожалению, я не могу гарантировать 100% идентичное поведение malloc / free во всех процессах до того, как я установлю mmap-mappings.
Это приводит меня к присвоению флага MAP_FIXED для mmap. Первый процесс использует 0x0 в качестве базового адреса, чтобы гарантировать, что диапазон отображения, по крайней мере, как-то разумен, но, похоже, это не передается другим процессам. (Двоичный файл также связан с -Wl, -no_pie.)
Я попытался выяснить, могу ли я запросить систему, чтобы узнать, какие страницы она планирует использовать для malloc, прочитав malloc_default_zone , но этот API, похоже, не предлагает то, что мне нужно.
Есть ли способ убедиться, что malloc не использует определенные страницы памяти / диапазоны адресов?
(Он должен работать на OSX. Советы по Linux, которые направляют меня в правильном направлении, также приветствуются.)