Адрес 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 особенные? В модели плоской памяти нет причин, по которым один адрес предпочтительнее любого другого.