调试 – 关闭调试堆的负面后果是什么? (_NO_DEBUG_HEAP == 1)

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

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

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

谢谢.

解决方法

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

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

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

HeapSetInformation的文档中有线索.

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

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...