2

我写了下面的代码

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。有谁知道我可以如何使用这些地址?

4

2 回答 2

5

用户模式应用程序无法访问这部分内存。从以下MSDN 页面

用户应用程序不能使用共享堆地址范围(0x70000000 到 0x7fffffff)调用VirtualAlloc,因为这对于用户应用程序是只读的,对于内核模式是读/写的。

于 2012-04-13T22:28:19.030 回答
0

您确定请求的内存块中的某些页面尚未保留(或提交)吗?VirtualAlloc 不能保留保留页。

为什么 0x70000000 和 0x80000000 很特别?在平面内存模型中,没有理由说一个地址比其他地址更可取。

于 2012-04-13T22:24:08.807 回答