Менеджер памяти MSVC имеет определенные шестнадцатеричные коды, которые он использует в сборках отладки, чтобы пометить память в зависимости от того, какая операция была выполнена. Это документировано здесь .
В частности, код 0xCDCDCDCD используется для маркировки выделенной, но неинициализированной памяти кучи. Предположим, у меня есть следующая структура:
struct Test
{
bool foo;
int value;
Test() : foo(false), value(0) {}
};
Когда я выделю этот объект, будет ли моя память выглядеть следующим образом (обратите внимание, что я записываю шестнадцатеричные байты в том порядке, в котором они будут отображаться по порядку, в этом примере не учитывалась последовательность)?
00 CD CD CD CD 00 00 00 00
Выше 00 CD CD CD
представляет 4-байтовое выровненное логическое значение. Последние 3 байта равны 0xCD
, потому что менеджер памяти инициализировал эти значения на CD, однако фактическая инициализация этого логического значения в структуре касается только 1 байта, поскольку логическое значение представляет только 1 байт на моем компьютере.
Это правильное поведение?