7

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

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

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

谢谢你。

4

1 回答 1

3

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

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

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

文档中有HeapSetInformation.

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

于 2013-03-26T15:57:50.087 回答