何时使用VirtualAlloc Vs新?

时间:2012-04-15 07:34:58

标签: c++ windows visual-c++

  

可能重复:
  What's the differences between VirtualAlloc and HeapAlloc?

我想预先分配一大块内存,比如1gb来实现一个内存池。 Virtual Alloc使用4kb的页面大小进行分配。在这种情况下使用virtualalloc而不是new的优势是什么?是否应该将new用于此场景,或者使用new over virtual alloc是否有任何缺点?

1 个答案:

答案 0 :(得分:4)

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

new将保留并提交1gb块。

因此,如果您需要即时访问整个1GB阻止,请继续使用新的。

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

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