• cl查看类的内存布局


    查看单个类的内存布局


           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.0VC>cl D:workspacec++TestTest.cpp /d1reportSingleClassLayoutDerived

    • 使用实例

           我们有如下一段代码,并且我们需要查看Derived类的内存布局。

    // Test.cpp
    #include <stdio.h>
    
    class Base
    {
    private:
        unsigned m_uCounter;
    
    public:
        Base() : m_uCounter(0) {}
        virtual ~Base() {}
    
    public:
        virtual void PrintHello()
        {
            printf("Base Class Prints Hello!");
        }
    };
    
    class Derived : public Base
    {
    private:
        unsigned m_uNumber;
    
    public:
        Derived() : m_uNumber(0) {}
        virtual ~Derived() {}
    
    public:
        virtual void PrintHello()
        {
            printf("Derived Class Prints Hello!");
        }
    };
    
    int main()
    {
        Base *pBase = ::new Derived;
        pBase->PrintHello();
        delete pBase;
        return 1;
    }

            在VS命令提示工具下输入cl D:workspacec++TestTest.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.0VC>cl D:workspacec++TestTest.cpp /d1reportAllClassLayout

    • 使用实例

           以上述代码为例,我们得到的输出如下所示。

  • 相关阅读:
    设计模式之建造者模式(简单)
    设计模式之简单工厂模式,工厂模式,抽象工厂模式
    设计模式之观察者模式
    Redis java操作客服端——jedis
    Redis基础
    java环境变量配置加maven配置
    设计模式之JDK动态代理
    springboot+mybatis+Thymeleaf
    OS问题管理系统开发
    复制CentOS虚拟机网络配置
  • 原文地址:https://www.cnblogs.com/heartchord/p/4861487.html
Copyright © 2020-2023  润新知