2012-04-09 68 views
2

我又写道下面的代码
的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。 有谁知道我可以如何使用这些地址?

回答

5

这部分内存不适用于用户模式应用程序。从以下MSDN page

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

+1

您的链接是Windows CE。一般来说,我不相信Windows是真的。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887(v=vs.85).aspx – 2012-04-13 22:57:15

+0

我似乎回想以上0x70000000保留为Windows上的内核,但无法找到这是一个参考 – 2012-04-13 23:44:51

0

是否确定请求的内存块中的某些页面尚未保留(或已提交)? VirtualAlloc不能保留一个保留页面。

为什么0x70000000和0x80000000是特殊的?在平面内存模型中,没有理由为什么一个地址比任何其他地址更好。