我的程序的初始階段將大量數據加載到STL容器中。我發現它需要幾分鐘才能達到我的程序真正的肉。將調試堆關閉的負面後果是什麼? (_NO_DEBUG_HEAP == 1)
經過一番搜索,我發現我可以在我的VS2012配置屬性 - >調試 - >環境變量中設置_NO_DEBUG_HEAP == 1 ...關閉窗口調試堆的利用。這使我的調試速度提高了10倍。我還沒有找到任何描述什麼調試功能,我失去了這樣做。
總結:通過使用Windows調試堆完成了哪些檢查和正在生成的調試信息?
謝謝。
我的程序的初始階段將大量數據加載到STL容器中。我發現它需要幾分鐘才能達到我的程序真正的肉。將調試堆關閉的負面後果是什麼? (_NO_DEBUG_HEAP == 1)
經過一番搜索,我發現我可以在我的VS2012配置屬性 - >調試 - >環境變量中設置_NO_DEBUG_HEAP == 1 ...關閉窗口調試堆的利用。這使我的調試速度提高了10倍。我還沒有找到任何描述什麼調試功能,我失去了這樣做。
總結:通過使用Windows調試堆完成了哪些檢查和正在生成的調試信息?
謝謝。
兩種方式調試堆會影響性能:
首先,在堆操作增加了檢查堆完整性。我還沒有找到有關這些檢查的詳細信息,但是我們假設在每次分配或釋放時都涉及驗證用於管理堆的數據結構的完整性。
其次,它禁用低碎片堆(LFH)選項。在發佈版本中,默認情況下會獲得LFH。在調試版本中,除非使用_NO_DEBUG_HEAP,否則不會。這不一定是速度懲罰,但它可能是。
HeapSetInformation
的文檔中有線索。
請注意,C和C++運行時庫提供構建在系統堆API之上的內存管理,並且它們還具有可以影響性能的調試和非調試模式。關於調試CRT的功能,有more detailed documentation。您可能會檢查並查看關閉CRT調試是否足以在不影響進程堆的調試模式的情況下顯着提升性能。
由於調試器堆,我沒有必須在過去的5年中調試Heisenbug的堆損壞。只有在背靠牆的情況下才可以放棄。考慮_HAS_ITERATOR_DEBUGGING = 0。當然,只能用一個健全的數據子集進行調試。 – 2013-03-26 16:38:54