【问题标题】:VirtualAlloc address虚拟分配地址
【发布时间】:2012-04-22 05:33:51
【问题描述】:

我写了下面的代码

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

【问题讨论】:

    标签: c++ c winapi virtualalloc


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2011-08-20
      • 2011-01-11
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      相关资源
      最近更新 更多