查看单个类的内存布局
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
• 使用实例
以上述代码为例,我们得到的输出如下所示。