c++ - 涉及填充时堆的 MSVC 初始化

标签 c++ memory-management heap-memory msvcrt

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/

相关文章:

C++ 堆内存性能改进

java - Tomcat7 java.lang.OutOfMemoryError : Java heap space 错误

c++ - 复制构造函数没有调用,为什么?

c - mprotect - 如何对齐多个页面大小?

c++ - 为堆栈重载比较运算符

memory-management - 调试内核模块(内存损坏_

c - 增加堆栈大小 : typical issues?

c - c程序的内存访问监视器

c++ - const 常量操作是否在运行时评估?

c++ - 模板类型之间的隐式转换