2013-03-26 11 views
7

Programımın ilk aşaması, önemli miktarda veriyi STL konteynerlerine yükler. Programımın gerçek etine ulaşamadan birkaç dakika geçtiğini anladım.Hata ayıklama kümesinin kapatılmasının olumsuz sonuçları nelerdir? (_NO_DEBUG_HEAP == 1)

Bazı aramalardan sonra, VS2012 Yapılandırma Özellikleri -> Hata ayıklama-> Ortam değişkeni içinde ... pencere hata ayıklama yığınının kullanımını kapatarak _NO_DEBUG_HEAP == 1 ayarlayabildiğimi buldum. Bu bana hata ayıklama hızında 10 kat artış sağlamıştır. Henüz ne yaparak hata ayıklama işlevinin kaybettiğine dair herhangi bir açıklama bulamadım.

Özetle: hangi kontroller tamamlandı ve windows debug yığınını kullanarak hangi hata ayıklama bilgisi üretildi?

Teşekkür ederiz.

+0

Hata ayıklayıcı yığını sayesinde son 5 yıl boyunca bir yığın bozulması heisenbug hata ayıklamak zorunda kaldım. Bunu, sadece duvarın arkasına döndüğünde ver. _HAS_ITERATOR_DEBUGGING = 0 değerini düşünün. Ve elbette sadece veri aklının bir alt kümesiyle hata ayıklayın. –

cevap

3

iki şekilde ayıklama yığın etkiler performans:

Birincisi, yığın işlemleri sırasında yığın bütünlüğüne kontrolleri ekler. Bu kontrollerle ilgili ayrıntıları bulamadım, ancak her bir tahsisatta veya ücretsiz olarak, öbeği yönetmek için kullanılan veri yapılarının bütünlüğünü doğrulamayı gerektirdiğini varsayalım.

İkinci olarak, düşük parçalanma yığınını (LFH) seçeneğini devre dışı bırakır. Bir sürüm yapısında, varsayılan olarak LFH alırsınız. Bir hata ayıklama yapısında, _NO_DEBUG_HEAP kullanmadığınız sürece yapmazsınız. Bu mutlaka bir hız cezası değil, ama olabilir.

HeapSetInformation belgelerinde ipuçları vardır.

C ve C++ çalışma zamanı kitaplıklarının, sistem yığını API'larının üzerine kurulu bellek yönetimi sağladığını ve ayrıca performansı etkileyebilecek hata ayıklama ve hata ayıklama modları olduğunu unutmayın. Hata ayıklama CRT'nin yaptığı hakkında more detailed documentation var. CRT hata ayıklamanın kapatılmasının, işlem yığının hata ayıklama moduna geçmeden performansta kayda değer bir artış sağlamaya yetecek kadar olup olmadığını kontrol edip edemeyeceğinizi görebilirsiniz.