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

时间:2013-03-26 14:01:17

标签: debugging visual-studio-2012 heap environment-variables

我的程序的初始阶段将大量数据加载到STL容器中。我发现要花几分钟才能达到我计划的真正含义。

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

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

谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

HeapSetInformation的文档中有线索。

请注意,C和C ++运行时库提供了基于系统堆API构建的内存管理,并且它们还具有可影响性能的调试和非调试模式。关于调试CRT的作用有more detailed documentation。您可以检查并查看关闭CRT调试是否足以在不干扰进程堆调试模式的情况下显着提升性能。