堆管理器不可能解除内存之后释放内存

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3073576
症状
低碎片堆 (LFH) 堆管理器不可能解除使用HeapFree释放的内存。因此即使在堆中的内存被释放在专用字节可能会增长。
更多信息
LFH 限制返回到后端堆的内存。当应用程序在其中它分配大量内存释放内存然后再重复此过程循环中即 LFH 有意不返回所有已提交的内存。这是因为分配模式建议应用程序将不得不很快重新分配的内存。因此 LFH 将缓存加快分配速度释放哪些应用程序的一部分。随着应用程序不断模式,LFH 仍会高速缓存内存和专用字节数的增加将会发生。

要点在于 LFH (和堆通常) 不能保证的时被释放的内存块的内存块也将解除。可以调用HeapCompact来指示堆到它可能出其高速缓存刷新的好时机。这样可以避免增加专用字节。但仍堆管理器可能会忽略该请求。
替代方法
专用字节来衡量活动的堆分配从非常不同的地方。如果必须要有强的专用字节控制应考虑使用VirtualAllocVirtualFree的 Api。

属性

文章 ID:3073576 - 上次审阅时间:07/13/2015 23:46:00 - 修订版本: 1.0

Windows 8.1, Windows 8.1 Enterprise, Windows 8.1 Pro

  • kbexpertiseadvanced kbtshoot kbsurveynew kbmt KB3073576 KbMtzh
反馈