VS开发人员查看C++类内存布局

方法一:

1.打开VS自带的命令行工具。当然,你把cl.exe的目录写到环境变量中,直接在cmd中也能用。

这是VS2012的。


下面这个是VS2013的。都一样。



2.使用cl命令的/d1 reportAllClassLayout或reportSingleClassLayoutXXX选项。这里的reportAllClassLayout选项会打印大量相关类的信息,一般用处不大。而reportSingleClassLayoutXXX选项的XXX代表要编译的代码中类的名字(这里XXX类),打印XXX类的内存布局和虚函数表(如果代码中没有对应的类,则选项无效)。

其中,/d1reportSingleClassLayoutXXX  显示指定XXX类的内存布局
           /d1reportAllClassLayou          显示所有类的内存布局

举个例子。注意,这个例子中为了简便,没有将类的析构函数定义为虚的。在下面的实例验证环节,我会将析构函数也定义成虚的。

下述两个类存储在test.cpp文件中。

[cpp]  view plain  copy
  1. class A{  
  2. public:  
  3.     void doX(){  
  4.         std::cout << "A function of X";  
  5.     }  
  6.       
  7. private:   
  8.     int a;  
  9. };  
  10.   
  11. class B: public A{  
  12. public:  
  13.     virtual void doX(){  
  14.         std::cout << "B function of X";  
  15.     }  
  16. };  

在命令行中输入 cl /d1reportSingleClassLayoutB test.cpp

结果如下所示:

[html]  view plain  copy
  1. class B size(8):  
  2.         +---  
  3.  0      | {vfptr}  
  4.         | +--- (base class A)  
  5.  4      | | a  
  6.         | +---  
  7.         +---  
  8.   
  9. B::$vftable@:  
  10.         | &B_meta  
  11.         |  0  
  12.  0      | &B::doX  
  13.   
  14. B::doX this adjustor: 0  

在命令行中输入 cl /d1reportSingleClassLayoutA test.cpp

结果如下所示:

[html]  view plain  copy
  1. class A size(4):  
  2.         +---  
  3.  0      | a  
  4.         +---  
转自: http://blog.csdn.net/friendbkf/article/details/49869703

方法二:

书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。

工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:

先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),则只会打出指定类XXX的内存布局。近期的VS版本都支持这样配置。

转自:http://www.wuseyun.com/htmldata/news/0/94090.html

比较喜欢下边这种

还可以查看:http://blog.csdn.net/daydreamingboy/article/details/8982563

http://blog.csdn.net/tennysonsky/article/details/52054291

      


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值