我正在学习Windows中的内存管理。我知道windows中的进程默认是它的堆,可以在将来扩展。此过程还可以创建其他(私有)堆。为什么Windows允许创建私有堆?这种方法有什么好处?据我所知,默认堆的使用(可能的重新分配)就足够了。或者也许是优化重新分配的另一种方式?
答案 0 :(得分:4)
如果查看HeapCreate
,您会看到它有多个选项可以更改堆的工作方式。 HEAP_NO_SERIALIZE
会使速度加快,但你必须自己处理线程同步等。
如果您使用不同的生命周期分配不同大小的对象,那么拥有多个堆也是有益的。您可能希望将大型长生命对象放在自己的堆上,如果您还有大量的小对象作为工作的一部分进行分配和解除分配以减少碎片(如果您是多线程则会锁定争用)。 / p>
如评论中所述,您可以在一次调用中调用HeapDestroy
释放每个分配和堆本身,但这只有在您完全控制在那里分配的所有内容时才有意义。您不能销毁默认堆,因此您必须创建自己的私有堆才能使用此技巧。