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

• 使用实例

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

原文地址:https://www.cnblogs.com/heartchord/p/4861487.html