Pourquoi la mémoire non allouée est-elle marquée comme 0xCC?

Dupliquer possible:
Quand et pourquoi un système d’exploitation initialise-t-il la mémoire sur 0xCD, 0xDD, etc. sur malloc / free / new / delete?

Pourquoi la mémoire que je n’ai pas initialisée est-elle définie sur 0xCC ?

Définir la mémoire sur 0xCC diminuera les performances. Il doit donc exister une raison pour remplir la mémoire avec cet octet.

Inside CRT: Gestion du tas de débogage

Lorsque vous comstackz une version de débogage de votre programme avec Visual Studio et l’exécutez dans le débogueur, vous pouvez constater que la mémoire allouée ou désallouée a des valeurs amusantes, telles que

0xCC Lorsque le code est compilé avec l’option / GZ, les variables non initialisées sont automatiquement affectées à cette valeur (au niveau octet).

Nombre magique sur le wiki :

CCCCCCCC Utilisé par la bibliothèque d’exécution de débogage C ++ de Microsoft pour marquer la mémoire de stack non initialisée

Dans Visual Studio CRT Source, \VC\crt\src\malloc.h :

 #define _ALLOCA_S_STACK_MARKER 0xCCCC // ... #undef _malloca #define _malloca(size) \ __pragma(warning(suppress: 6255)) \ ((((size) + _ALLOCA_S_MARKER_SIZE) <= _ALLOCA_S_THRESHOLD) ? \ _MarkAllocaS(_alloca((size) + _ALLOCA_S_MARKER_SIZE), _ALLOCA_S_STACK_MARKER) : \ _MarkAllocaS(malloc((size) + _ALLOCA_S_MARKER_SIZE), _ALLOCA_S_HEAP_MARKER)) 

Le compilateur le fait pour vous en mode débogage. Ainsi, si vous lisez accidentellement une mémoire non initialisée, vous verrez la valeur 0xCC distinctive et vous reconnaissez que vous lisez (probablement) de la mémoire non initialisée. La valeur 0xCC a beaucoup d’autres propriétés utiles, par exemple, il s’agit de l’instruction en langage machine permettant d’invoquer un point d’arrêt matériel si vous exécutez accidentellement de la mémoire non initialisée.

Le principe de base: faciliter l’identification des valeurs issues de la lecture d’une mémoire non initialisée.

Cela ne se produit pas dans vos versions.

Cette technique a été introduite dans Writing Solid Code .

Lorsque le code est compilé avec l’option / GZ, les variables non initialisées sont automatiquement affectées à cette valeur (au niveau octet).

0xCC est une instruction de code machine pour appeler un point d’arrêt. Pour plus d’informations, voir une autre question .