Memory management 虚拟排列

Memory management 虚拟排列,memory-management,winapi,alignment,memory-alignment,Memory Management,Winapi,Alignment,Memory Alignment,VirtualAlloc返回的内存块是否始终与页面大小对齐?换句话说,模数是否总是VirtualAlloc返回值和页面大小的零?来自VirtualAlloc的MSDN文档: 如果内存已被保留,并且 正在提交,地址为 向下舍入到下一页 边界 因此,如果您提交内存而不仅仅是保留内存,那么答案是肯定的。是的 毕竟,您可以调用VirtualAlloc来分配一些内存页。在不接收整个页面的情况下,您不能只分配1个字节,因此您将接收一个与页面大小对齐的缓冲区是有意义的。因此您是说下面的调用将始终返回一个向下舍

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

来自VirtualAlloc的MSDN文档:

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

因此,如果您提交内存而不仅仅是保留内存,那么答案是肯定的。

是的


毕竟,您可以调用VirtualAlloc来分配一些内存页。在不接收整个页面的情况下,您不能只分配1个字节,因此您将接收一个与页面大小对齐的缓冲区是有意义的。

因此您是说下面的调用将始终返回一个向下舍入到下一页边界的地址。请注意,lpAddress参数为NULL,因此无法保留。VirtualAlloc(NULL,1024,MEM_COMMIT,PAGE_READWRITE)是的,我就是这么说的。但是我认为您误解了“reserved”的含义。文档中提到了MEM_RESERVE标志,它与lpAddress参数无关。我相信我知道“reserved”是什么意思。我的示例函数调用未在“保留”页上运行。我从不使用“保留”页面。文档从未提及如果提交页面而不首先保留页面,会发生什么情况。我使用NULL只是一种简单的方式,表示我从未保留过那块内存。