关闭调试堆有什么负面影响?(_NO_DEBUG_HEAP == 1)

Pau*_*ulD 7 debugging heap environment-variables visual-studio-2012

我的程序的初始阶段将大量数据加载到STL容器中.我发现需要几分钟时间才能达到程序的真正含量.

经过一番搜索,我发现我可以在我的VS2012配置属性 - >调试 - >环境变量中设置_NO_DEBUG_HEAP == 1 ...关闭Windows调试堆的利用率.这使我的调试速度提高了10倍.我还没有找到任何描述我这样做失去了什么调试功能.

总结:使用Windows调试堆完成了哪些检查以及生成了哪些调试信息?

谢谢.

Adr*_*thy 3

调试堆通过两种方式影响性能:

首先,它在堆操作期间添加了对堆完整性的检查。我还没有找到有关这些检查的详细信息,但假设在每次分配或释放时,它都涉及验证用于管理堆的数据结构的完整性。

其次,它禁用低碎片堆 (LFH) 选项。在发布版本中,默认情况下您会获得 LFH。在调试版本中,除非您使用 _NO_DEBUG_HEAP,否则您不需要。这不一定是速度损失,但也可能是。

的文档中有一些线索HeapSetInformation

请注意,C 和 C++ 运行时库提供构建在系统堆 API 之上的内存管理,并且它们还具有可能影响性能的调试和非调试模式。有关于调试 CRT 功能的更详细文档。您可以检查并查看关闭 CRT 调试是否足以显着提高性能,而不会扰乱进程堆的调试模式。