我的程序的初始阶段将大量数据加载到 STL 容器中。我发现我需要几分钟才能达到程序的核心内容。
经过一番搜索,我发现我可以在 VS2012 配置属性->调试->环境变量中设置 _NO_DEBUG_HEAP==1...关闭 Windows 调试堆的使用。这使我的调试速度提高了 10 倍。我还没有找到任何描述我这样做会失去什么调试功能。
总结:使用 Windows 调试堆完成了哪些检查以及生成了哪些调试信息?
谢谢。
最佳答案
调试堆通过两种方式影响性能:
首先,它在堆操作期间添加了对堆完整性的检查。我还没有找到有关这些检查的详细信息,但假设在每次分配或释放时,它都涉及验证用于管理堆的数据结构的完整性。
其次,它禁用低碎片堆 (LFH) 选项。在发布版本中,默认情况下您会获得 LFH。在调试版本中,除非您使用 _NO_DEBUG_HEAP,否则您不需要。这不一定是速度损失,但也可能是。
HeapSetInformation
的文档中有一些线索.
请注意,C 和 C++ 运行时库提供构建在系统堆 API 之上的内存管理,并且它们还具有可能影响性能的调试和非 Debug模式。有more detailed documentation关于调试 CRT 的作用。您可以检查并查看关闭 CRT 调试是否足以显着提高性能,而不会扰乱进程堆的 Debug模式。
关于debugging - 关闭调试堆有哪些负面后果? (_NO_DEBUG_HEAP==1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15638995/