2012-04-15 57 views
2

可能重复:
What's the differences between VirtualAlloc and HeapAlloc?何时使用VirtualAlloc Vs新?

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

+1

duplicate http://stackoverflow.com/q/872072/79455 – rve 2012-04-15 08:34:11

+0

如果你分配大块内存,并在页面边界上对齐是一个优势,我敢打赌'新'也会这样做。一个区别是'new'是语言的一部分,'VirtualAlloc'是特定操作系统的一部分。 – 2012-04-15 09:55:29

回答

4

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

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

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

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

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

相关问题