内存布局可能使用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