【问题标题】:VirtualAlloc alignmentVirtualAlloc 对齐
【发布时间】:2010-08-09 20:33:48
【问题描述】:

VirtualAlloc 返回的内存块是否总是与页面大小对齐?换句话说,VirtualAlloc 的返回值和页面大小的模数总是为零吗?

【问题讨论】:

    标签: memory-management winapi alignment memory-alignment


    【解决方案1】:

    嗯,是的。

    毕竟,你调用 VirtualAlloc 来分配一些内存页面。您不能只分配 1 个字节而不接收整个页面,因此您将收到与页面大小对齐的缓冲区是有道理的。

    【讨论】:

      【解决方案2】:

      来自 VirtualAlloc 的 MSDN 文档:

      如果内存已经被保留并且 正在提交,地址是 向下舍入到下一页 边界。

      所以答案是肯定的,如果你提交内存而不是保留它。

      【讨论】:

      • 所以你说跟随调用总是会返回一个向下舍入到下一页边界的地址。请注意 lpAddress 参数为 NULL,因此不能保留。 VirtualAlloc(NULL, 1024, MEM_COMMIT, PAGE_READWRITE)
      • 是的,这就是我要说的。但我认为你误解了“保留”的含义。文档讨论了 MEM_RESERVE 标志,它与 lpAddress 参数无关。
      • 我相信我确实知道“保留”是什么意思。我的示例函数调用没有在“保留”页面上运行。我从不使用“保留”页面。该文档从未提及如果在未先保留页面的情况下提交页面会发生什么。我使用 NULL 只是一种快速的说法,我从未保留过那块内存。
      猜你喜欢
      • 2013-11-30
      • 2015-07-04
      • 2014-11-19
      • 2011-08-19
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      相关资源
      最近更新 更多