MSVC 内存管理器有一些十六进制代码,它在调试版本中使用它来根据执行的操作来标记内存。这些记录在案 here .
特别是,代码 0xCDCDCDCD 用于标记已分配但未初始化的堆内存。假设我有以下结构:
struct Test
{
bool foo;
int value;
Test() : foo(false), value(0) {}
};
当我分配这个对象时,我的内存会是这样吗(请注意,我正在写出十六进制字节,因为它们会按顺序出现,这个例子没有考虑字节顺序)?
00 CD CD CD 00 00 00 00
上面,00 CD CD CD
表示 4 字节对齐的 bool 值。最后 3 个字节是 0xCD
,因为内存管理器将这些值初始化为 CD,但是结构中该 bool 值的实际初始化只涉及 1 个字节,因为 bool 值在我的机器上只代表 1 个字节。
这是正确的行为吗?
最佳答案
试试吧。确保使用 /MDd
等进行编译以链接到调试运行时。 (在 VS2010 中答案是肯定的)。
关于c++ - 涉及填充时堆的 MSVC 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8410519/