何时使用VirtualAlloc Vs新?

可能重复:
VirtualAlloc和HeapAlloc有什么区别?

我想预先分配一大块内存,比如1GB来实现一个内存池。 虚拟分配使用4kb的页面大小分配。 在这种情况下使用virtualalloc优于新的优点是什么? 如果新的不应该用于这种情况下,或者有使用新的虚拟分配的任何缺点?

借助VirtualAlloc,您可以保留1GB的地址范围。 稍后,您可以按需提交其中的一部分 – 以便为给定的保留地址块分配实际的物理内存块。 如果物理内存不足,保留应该永远不会失败,而提交可能会失败。 实际上在Windows上的分页文件也应该总是成功。

新的将保留并提交1GB的块。

因此,如果您需要立即访问整个1GB的块,那么请继续使用新的块。

如果在开始时不需要访问整个1GB块,并且可以编写算法,以便按需提交部分内存,则VirtualAlloc可以优化您的内存消耗。

如果您考虑将VirtualAlloc用于您的目的,那么您可能很难决定何时以及如何提交内存。 我在Jeffrey Richter的书(Advanced Windows 3rd ed。)中找到的一个很好的方法是使用结构化异常处理。 一旦你的代码触及了未被占用的内存异常,你所要做的就是抓住它,提交内存,然后告诉系统重试发生问题的指令。 我从来没有尝试过,但从我的知识来看,这是如何堆栈实际工作。