cl查看类的内存布局
查看单个类的内存布局
Microsoft Visual Studio编译器cl的编译选项可以查看源文件中某个C++类的内存布局,对于想了解某个对象的内存布局的人来说十分直观和方便。
• 命令格式
cl <FileName> /d1reportSingleClassLayout[ClassName]
FileName : 文件名,包含文件路径。
d1reportSingleClassLayout : 编译器选项。
ClassName : 待查看内存布局的目标类,需要注意ClassName和d1reportSingleClassLayout选项之间没有空格。
• 使用方法
▶ 开始 -> 所有程序 -> Microsoft Visual Studio 20XX -> Visual Studio Tools -> Visual Studio 20XX 命令提示;
▶ C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC>cl D:\workspace\c++\Test\Test.cpp /d1reportSingleClassLayoutDerived
• 使用实例
我们有如下一段代码,并且我们需要查看Derived类的内存布局。
// Test.cpp
#include <stdio.h> class Base
{
private:
unsigned m_uCounter; public:
Base() : m_uCounter() {}
virtual ~Base() {} public:
virtual void PrintHello()
{
printf("Base Class Prints Hello!");
}
}; class Derived : public Base
{
private:
unsigned m_uNumber; public:
Derived() : m_uNumber() {}
virtual ~Derived() {} public:
virtual void PrintHello()
{
printf("Derived Class Prints Hello!");
}
}; int main()
{
Base *pBase = ::new Derived;
pBase->PrintHello();
delete pBase;
return ;
}
在VS命令提示工具下输入cl D:\workspace\c++\Test\Test.cpp /d1reportSingleClassLayoutDerived之后控制台输出为:

查看所有类的内存布局
除了d1reportSingleClassLayout选项之外,还有另外一个选项d1reportAllClassLayout可以用于查看某个源文件中所有类的内存布局信息。
• 命令格式
cl <FileName> /d1reportAllClassLayout
FileName : 文件名,包含文件路径。
d1reportAllClassLayout : 编译器选项。
• 使用方法
▶ 开始 -> 所有程序 -> Microsoft Visual Studio 20XX -> Visual Studio Tools -> Visual Studio 20XX 命令提示;
▶ C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC>cl D:\workspace\c++\Test\Test.cpp /d1reportAllClassLayout
• 使用实例
以上述代码为例,我们得到的输出如下所示。

cl查看类的内存布局的更多相关文章
- VS2010下如何查看类的内存布局
用VS2010查看类的内存布局,这里用两种方法 (1)MSVC有个隐藏的"/d1"开关,通过这个开关可以查看项目中类的内存布局情况. 修改项目属性,添加"/d1 repo ...
- [CPP] 类的内存布局
本文可以解决下面 3 个问题: 以不同方式继承之后,类的成员变量是如何分布的? 虚函数表及虚函数表指针,在可执行文件中的位置? 单一继承.多继承.虚拟继承之后,类的虚函数表的内容是如何变化的? 在这里 ...
- 继承虚函数浅谈 c++ 类,继承类,有虚函数的类,虚拟继承的类的内存布局,使用vs2010打印布局结果。
本文笔者在青岛逛街的时候突然想到的...最近就有想写几篇关于继承虚函数的笔记,所以回家到之后就奋笔疾书的写出来发布了 应用sizeof函数求类巨细这个问题在很多面试,口试题中很轻易考,而涉及到类的时候 ...
- c++类的内存布局
问题: 考察了reinterpret_cast和static_cast的区别.顺道发现了一个可以查看c++内存布局的工具(在VS中). 结果: 前两个输出的地址形同,后一个不同. class A{in ...
- 使用sos查看.NET对象内存布局
前面我们图解了.NET里各种对象的内存布局,我们再来从调试器和clr源码的角度来看一下对象的内存布局.我写了一个测试程序来加深对.net对象内存布局的了解: using System; using S ...
- c++中如何查看一个类的内存布局
打开VS command prompt,输入下述命令可以看到对象的内存布局. cl a.cpp -d1 reportSingleClassLayout[classname] // reportSin ...
- C++类继承内存布局(一)
转自:http://blog.csdn.net/jiangyi711/article/details/4890889# 一 类布局 不同的继承方式将导致不同的内存布局 1)C结构 C++基于C,所以C ...
- 【C++对象模型】使用gcc、clang和VC++显示C++类的内存布局
引言 各种C++实现对C++类/对象的内存布局可能有所不同,包括数据成员的顺序.虚函数表(virtual table: vtbl)的结构.继承关系的处理等.了解C++类/对象的布局,对于理解C++各种 ...
- C++类继承内存布局(三)
参考:http://blog.csdn.net/jiangyi711/article/details/4890889# (三)成员函数 类X中每一个非静态成员函数都会接受一个特殊的隐藏参数——this ...
随机推荐
- 29Mybatis_整合ehcache以及应用场景
ehcache是一个分布式缓存框架. 分布缓存
- hdu 1025:Constructing Roads In JGShining's Kingdom(DP + 二分优化)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- 【NLP+Deep learning】好文
http://blog.jobbole.com/77709/ 原文出处: http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/
- VC++ Splash Window封装类CSplash
Splash.h 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 ...
- node 下好用的工具
1. supervisor Node Supervisor is used to restart programs when they crash. Node Supervisor 是用来当程序崩溃时 ...
- Java知识点梳理——装箱和拆箱
1.前言:Java是典型的面向对象编程语言,但其中有8种基本数据类型不支持面向对象编程,基本数据类型不具备对象的特性,没有属性和方法:Java为此8种基本数据类型设计了对应的类(包装类),使之相互转换 ...
- 《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
原创文章,欢迎转载.转载请注明:关东升的博客 如果引入必要的头文件,在Objective-C语言中可以使用C数据类型.而在Swift语言中是不能直接使用C数据类型,苹果公司为Swift语言提供与C语言 ...
- Arduino开发版学习计划--直流电机
代码来源:http://www.cnblogs.com/starsnow/p/4579547.html // --------------------------------------------- ...
- spring could Windows打包构建docker镜像到linux
工程模拟参考:http://blog.csdn.net/forezp/article/details/70198649 一.工程结构 二.Pom配置 <build> <plugins ...
- 初级Java面试题 - JavaSE篇
p{font-size:18px;} li{font-size:18px;} 加入我的QQ群(701974765) 获取更多好用又好玩的软件,还有不定期发放的福利呦(- ̄▽ ̄)- Java基本数据类型 ...