• 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

  • 相关阅读:
    SSM学习笔记之Spring, SpringIoC, 注解, SpringAOP, Spring整合MyBatis
    Java学习笔记之网络编程
    Maven学习笔记之Mac环境下安装和配置Maven
    SSM学习笔记之MyBatis
    SSM学习笔记之SpringMVC
    ODP.NET 开发 出现 ORA12154: TNS:could not resolve the connect identifier specified 错误
    MEF开发资源
    Windows Store 应用程序开发示例资源
    QNAS MariaDB 远程登录配置
    Oracle通过DBLINK访问PG13
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/5441487.html
Copyright © 2020-2023  润新知