【问题标题】:What are the negative consequences of turning debug heap off? (_NO_DEBUG_HEAP==1)关闭调试堆有什么负面影响? (_NO_DEBUG_HEAP==1)
【发布时间】:2013-03-16 08:41:22
【问题描述】:

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

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

总而言之:使用 Windows 调试堆完成了哪些检查以及正在生成哪些调试信息?

谢谢。

【问题讨论】:

  • 在过去的 5 年里,我不必调试堆损坏 heisenbug,这要归功于调试器堆。只有当你背对墙时才放弃这个。考虑 _HAS_ITERATOR_DEBUGGING=0。当然,只能使用合理的数据子集进行调试。

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


【解决方案1】:

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

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

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

HeapSetInformation 的文档中有线索。

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

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 2018-01-23
    • 2014-12-08
    • 2011-12-24
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多