为什么windows允许创建私有堆?

为什么windows允许创建私有堆?,windows,memory-management,heap,Windows,Memory Management,Heap,我正在Windows中学习内存管理。我知道windows中的进程默认有自己的堆,将来可以扩展。进程还可以创建其他(私有)堆。为什么windows允许创建私有堆?这种方法的好处是什么?据我所知,使用默认堆(以及可能的重新分配)就足够了。或者,这是优化重新分配的另一种方法吗?如果您查看一下,您会发现它有多个选项可以改变堆的工作方式HEAP\u NO\u SERIALIZE将使其速度更快,但您必须自己处理线程同步等 如果使用不同的生命周期分配不同大小的对象,那么拥有多个堆也会很有好处。如果在减少碎片(

我正在Windows中学习内存管理。我知道windows中的进程默认有自己的堆,将来可以扩展。进程还可以创建其他(私有)堆。为什么windows允许创建私有堆?这种方法的好处是什么?据我所知,使用默认堆(以及可能的重新分配)就足够了。或者,这是优化重新分配的另一种方法吗?

如果您查看一下,您会发现它有多个选项可以改变堆的工作方式
HEAP\u NO\u SERIALIZE
将使其速度更快,但您必须自己处理线程同步等

如果使用不同的生命周期分配不同大小的对象,那么拥有多个堆也会很有好处。如果在减少碎片(如果是多线程的,则锁定争用)的工作中分配和取消分配了大量小对象,那么您可能希望将大型长寿命对象放在它们自己的堆中


如注释中所述,您可以调用
HeapDestroy
在一次调用中释放每个分配和堆本身,但这只有在您完全控制分配的所有内容时才有意义。您不允许破坏默认堆,因此必须创建自己的私有堆才能使用此技巧。

能够调用
HeapDestroy
立即释放不再需要的所有内容(而不是单独进行代价高昂的释放对象)是一大好处。或者,正如“[…]堆内存的一个好处是它能很好地满足传统数据结构(如二叉树、链表和动态数组)的需要。拥有堆句柄提供了一种独立地唯一标识这些结构的方法。”。这显示了在真实场景中如何使用私有堆:减少线程争用,减少碎片。