Адрес VirtualAlloc

Я пишу код ниже

 void * ptr1 = VirtualAlloc((void*)0x70000000, 32*1024*1024, MEM_RESERVE, PAGE_READWRITE);
 void * ptr2 = VirtualAlloc((void*)0x80000000, 4*1024*1024, MEM_RESERVE, PAGE_READWRITE);

Но VirtualAlloc дает сбой, и значения ptr1,ptr2 всегда равны NULL. Я хочу использовать адрес 0x70000000,0x80000000. Кто-нибудь знает, как я могу использовать эти адреса?

2 ответа

Решение

Эта часть памяти недоступна для пользовательских приложений. Со следующей страницы MSDN:

Пользовательские приложения не могут вызывать VirtualAlloc с диапазоном адресов совместно используемой кучи (от 0x70000000 до 0x7fffffff), потому что это только для чтения для пользовательских приложений и чтение / запись для режима ядра.

Вы уверены, что некоторые страницы в запрошенном блоке памяти еще не зарезервированы (или зафиксированы)? VirtualAlloc не может зарезервировать зарезервированную страницу.

Почему 0x70000000 и 0x80000000 особенные? В модели плоской памяти нет причин, по которым один адрес предпочтительнее любого другого.

Другие вопросы по тегам