VS2013命令行界面查看虚函数的内存布局

内存布局可能使用vs的界面调试看到的旺旺是一串数字,很不方便,但是vs的命令行界面可以很直观的显示出一个类中具体的内存布局。

打开命令行。界面如下所示:

测试代码如下所示:

 1 class Base1 {
 2 public:
 3     Base1();
 4     virtual ~Base1();
 5     virtual void speackClearly();
 6     virtual Base1* clone() const;
 7 protected:
 8     float data_Base1;
 9 };
10 
11 class Base2 {
12 public:
13     Base2();
14     virtual ~Base2();
15     virtual void mumble();
16     virtual Base2* clone() const;
17 protected:
18     float data_Base2;
19 };
20 
21 class Derived : public Base1, public Base2 {
22 public:
23     Derived();
24     virtual ~Derived();
25     virtual Derived* clone() const;
26 protected:
27     float data_Derived;
28 };
29 
30 int main(void)
31 {
32     return 0;
33 }

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

1 cl /d1 reportSingleClassLayoutBase1 main.cpp
2 cl /d1 reportSingleClassLayoutBase2 main.cpp
3 cl /d1 reportSingleClassLayoutDerived main.cpp

来分别打印出三个类的内存布局,如下所示:

Base1:

Base2:

Derived:

 

参考:

  http://www.cnblogs.com/hitwtx/archive/2011/08/20/2147431.html

  http://my.oschina.net/hnuweiwei/blog/280894

posted @ 2016-04-28 09:48  eversliver  阅读(1815)  评论(0编辑  收藏  举报