查看单个类的内存布局


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查看类的内存布局的更多相关文章

  1. VS2010下如何查看类的内存布局

    用VS2010查看类的内存布局,这里用两种方法 (1)MSVC有个隐藏的"/d1"开关,通过这个开关可以查看项目中类的内存布局情况. 修改项目属性,添加"/d1 repo ...

  2. [CPP] 类的内存布局

    本文可以解决下面 3 个问题: 以不同方式继承之后,类的成员变量是如何分布的? 虚函数表及虚函数表指针,在可执行文件中的位置? 单一继承.多继承.虚拟继承之后,类的虚函数表的内容是如何变化的? 在这里 ...

  3. 继承虚函数浅谈 c++ 类,继承类,有虚函数的类,虚拟继承的类的内存布局,使用vs2010打印布局结果。

    本文笔者在青岛逛街的时候突然想到的...最近就有想写几篇关于继承虚函数的笔记,所以回家到之后就奋笔疾书的写出来发布了 应用sizeof函数求类巨细这个问题在很多面试,口试题中很轻易考,而涉及到类的时候 ...

  4. c++类的内存布局

    问题: 考察了reinterpret_cast和static_cast的区别.顺道发现了一个可以查看c++内存布局的工具(在VS中). 结果: 前两个输出的地址形同,后一个不同. class A{in ...

  5. 使用sos查看.NET对象内存布局

    前面我们图解了.NET里各种对象的内存布局,我们再来从调试器和clr源码的角度来看一下对象的内存布局.我写了一个测试程序来加深对.net对象内存布局的了解: using System; using S ...

  6. c++中如何查看一个类的内存布局

    打开VS command prompt,输入下述命令可以看到对象的内存布局. cl a.cpp -d1 reportSingleClassLayout[classname] //  reportSin ...

  7. C++类继承内存布局(一)

    转自:http://blog.csdn.net/jiangyi711/article/details/4890889# 一 类布局 不同的继承方式将导致不同的内存布局 1)C结构 C++基于C,所以C ...

  8. 【C++对象模型】使用gcc、clang和VC++显示C++类的内存布局

    引言 各种C++实现对C++类/对象的内存布局可能有所不同,包括数据成员的顺序.虚函数表(virtual table: vtbl)的结构.继承关系的处理等.了解C++类/对象的布局,对于理解C++各种 ...

  9. C++类继承内存布局(三)

    参考:http://blog.csdn.net/jiangyi711/article/details/4890889# (三)成员函数 类X中每一个非静态成员函数都会接受一个特殊的隐藏参数——this ...

随机推荐

  1. 逻辑斯特回归(logistic regression)与最大熵模型(maximum entropy model)

  2. Apache -- 压力测试工具ab.exe

    ab全称ApacheBench是Apache超文本传输协议(HTTP)的性能测试工具.是描绘当前所安装的Apache的执行性能, 主要是显示你安装的Apache每秒可以处理多少个请求Apache自带的 ...

  3. 开源 java CMS - FreeCMS2.3 移动app生成栏目数据

    原文地址:http://javaz.cn/site/javaz/site_study/info/2015/28230.html​ 项目地址:http://www.freeteam.cn/ 生成栏目数据 ...

  4. iOS 基于OpenCV图像比较的常见方法

    先列个大纲 1.模板匹配 2.直方图比较 3.感知哈希算法 4.特征点匹配

  5. Spring Cache 自定义注解

    1.在使用spring cache注解如cacheable.cacheevict.cacheput过程中有一些问题: 比如,我们在查到一个list后,可以将list缓存到一个键对应的区域里:当新增.修 ...

  6. mysql关联取附表最后一条记录,附加lareval orm实现

    MySQL 多表关联一对多查询取最新的一条数据:https://blog.csdn.net/u013902368/article/details/86615382 Laravel query buil ...

  7. Android无线测试之—UiAutomator UiScrollable API介绍六

    向前与向后滚动API 一.向前与向后滚动相关API 返回值 API 描述 boolean scrollBackward(int steps) 自动以步长向后滑动 boolean scrollBackw ...

  8. vue2.0中,由于页面完成之后dom还未加载完成如何进行操作

    再vue中,当页面加载完成以后,dom还没有加载,是无法获取进行操作的,但是在vue2.0中提供了一个方法:this.$nextTick,在这个回调函数里面写dom操作即可: 如下代码: create ...

  9. js 跨域 之 修改服务器配置-XAMPP-Apache (nginx 拉到最后!)

    js高程第21章提到了ajax 跨域技术,方法有很多,如图: 我主要讲这个: 其实代码就是这样就好了,当然只兼容 IE9 及之后的版本 ,IE9 之前的版本请去原书看吧,Page 600 var xh ...

  10. centos免密登录

    本文是为了docker-machine增加现有虚拟机服务器为节点而做 docker-machine create -d generic --generic-ip-address=192.168.102 ...