2010-02-09 53 views
2

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

回答

2

好的,是的。

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

1

从MSDN文档的VirtualAlloc:

如果内存已保留并 正在犯,地址是 四舍五入到下一个页面 边界。

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

+0

所以你说下面的调用将总是返回一个向下舍入到下一页边界的地址。请注意,lpAddress参数为NULL,因此无法保留。 VirtualAlloc(NULL,1024,MEM_COMMIT,PAGE_READWRITE) – Mike 2010-02-09 21:51:49

+0

是的,这就是我要说的。但我认为你误解了“保留”的含义。该文档讨论了MEM_RESERVE标志,它与lpAddress参数无关。 – flodin 2010-02-13 07:34:21

+0

我相信我确实知道“保留”是什么意思。我的示例函数调用没有在“保留”页面上运行。我从不使用“保留”页面。文档从未提及如果页面没有首先被保留就被提交。我使用NULL仅仅是说我从不保留这块内存的快速方法。 – Mike 2010-02-15 15:57:33