VirtualAlloc地址

时间:2012-04-09 21:24:41

标签: c++ c winapi 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 个答案:

答案 0 :(得分:5)

用户模式应用程序无法访问此部分内存。来自以下MSDN page

  

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

答案 1 :(得分:0)

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

为什么0x70000000和0x80000000特殊?在平面存储器模型中,没有理由认为一个地址比任何其他地址更可取。