Я пытаюсь выделить часть памяти, которая может быть разделена между двумя процессами с помощью Win API. Я успешно реализовал его, используя CreateFileMapping / OpenFileMapping в сочетании с MapViewOfFile . Тем не менее, я требую, чтобы базовый адрес был согласованным для двух процессов, которые ему не предоставляются с именованной общей памятью. Таким образом, я попытался использовать VirtualAlloc для создания памяти в первом процессе по определенному адресу:
VirtualAlloc((void*)0x80000000LL,
65536,
MEM_RESERVE | MEM_COMMIT,
PAGE_READWRITE);
Это не сообщает о каких-либо ошибках, и выделенная память используется. Тем не менее, если я попытаюсь получить доступ к памяти в этом конкретном месте во втором процессе:
char c = *((const char*)0x80000000LL);
выдает «Попытка доступа к неверному адресу». Есть ли функция, которую мне нужно вызвать во втором / первом процессе, чтобы сделать область памяти доступной для чтения / записи или изменить разрешение?