debugging - 关闭调试堆有哪些负面后果? (_NO_DEBUG_HEAP==1)

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

我的程序的初始阶段将大量数据加载到 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/

相关文章:

java - 找出以编程方式抛出 NullPointerException 的变量

Python 属性错误 : type object 'x' has no attribute 'x'

visual-studio-2012 - 构建我的云项目时出现"Object reference not set to an instance of an object"

ruby-on-rails - 无法将数组分配给 .ENV 文件中的变量(rails 应用程序)

powershell - 如何设置使用Powershell可以随时访问的环境变量?

ios - 某些功能在 "Release"部署中不起作用(但在 "Debug"中起作用)

javascript - console.log() 语句不会出现在 Safari 错误日志中

c++ - 在编译时静态检查 map ?

c++ - 未处理的异常 - 如果/SUBSYSTEM 参数已更改,则访问冲突

python itertools组合逻辑