[C++] Windows Debug Heap

Vielleicht ist es euch schon einmal begegnet:

Ihr startet euer Visual Studio Projekt mit STRG + F5 im Release Build „Start without Debugging“ und habt ein seltsames Verhalten. Wenn ihr das Projekt im gleichen Build (Release) startet verhält sich euer Projekt plötzlich anders. Seien es Crashes, andere Variablenwerte oder Framerateprobleme.

Der erste Gedanke ist meist „WTF?“. Denn eigentlich sollte man erwarten, dass mein ReleaseBuild eben der ReleaseBuild ist und sich sowohl mit Debugger als auch ohne gleich verhält.

Dem ist aber offensichtlich nicht so und der Übeltäter nennt sich Windows Debug Heap. Der Windows Debug Heap ist ein spezieller Speicherbereich, der unter anderem beim Allokieren und Freigaben von Speicher ein Integritätscheck ausführt. Das verlangsamt die Anwendung und kann dazu führen, dass Speicherbereiche mit 0 initialisiert werden, die ohne laufendem Debugger nicht initialisiert sind.

Wie auch immer der Heap kann deaktiviert werden. Dazu kann das Flag _NO_DEBUG_HEAP in den Umgabungsvariablen auf 1 gesetzt werden. Das sollte man natürlich nur dann tun, wenn man genau solche Probleme finden will.

Leave a reply