Warum wird der nicht zugewiesene Speicher wie 0xCC markiert? [Duplikat]

7

Warum wurde der Speicher, den ich nicht initialisiert habe, auf 0xCC gesetzt?

Wenn der Speicher auf 0xCC eingestellt wird, verringert sich die Leistung, daher muss ein Grund dafür gegeben sein, den Speicher mit diesem Byte zu füllen.

    
Sergey Vystoropskyi 08.08.2012, 12:44
quelle

3 Antworten

14

In CRT: Debug Heap Management

  

Beim Kompilieren eines Debug-Builds Ihres Programms mit Visual Studio und   Führen Sie es im Debugger aus, Sie können sehen, dass der zugewiesene Speicher oder   Deallocated hat lustige Werte, wie ...

     

0xCC Wenn der Code mit der Option / GZ kompiliert wird, wird er nicht initialisiert   Variablen werden diesem Wert automatisch zugewiesen (auf Byte-Ebene).

Magic Number im Wiki :

  

CCCCCCCC Wird von der C ++ - Debugging-Laufzeitbibliothek von Microsoft zum Markieren verwendet   nicht initialisierter Stapelspeicher

In der Visual Studio-CRT-Quelle, \VC\crt\src\malloc.h :

%Vor%     
Roman R. 08.08.2012, 12:47
quelle
5

Der Compiler macht das für Sie im Debug-Modus, so dass Sie, wenn Sie versehentlich nicht initialisierten Speicher lesen, den eindeutigen 0xCC-Wert sehen und erkennen, dass Sie (wahrscheinlich) nicht initialisierten Speicher lesen. Der 0xCC-Wert hat eine Menge anderer nützlicher Eigenschaften, z. B. ist es der Maschinensprachbefehl zum Aufrufen eines Hardware-Haltepunkts, wenn Sie versehentlich nicht initialisierten Speicher ausführen.

Das Grundprinzip: Machen Sie es einfach, Werte zu identifizieren, die beim Lesen von nicht initialisiertem Speicher entstehen.

Dies geschieht nicht in Ihren Release-Builds.

Diese Technik wurde in Solide Code schreiben eingeführt.

    
Ken Bloom 08.08.2012 13:06
quelle
2
  

Wenn der Code mit der Option / GZ kompiliert wird, werden diesem Wert automatisch nicht initialisierte Variablen zugewiesen (auf Byte-Ebene).

0xCC ist eine Maschinencodeanweisung zum Aufrufen eines Unterbrechungspunkts. Weitere Informationen finden Sie unter einer anderen Frage .

    
Taky 08.08.2012 12:52
quelle

Tags und Links