【C++学习】 VS2012 使用命令行选项查看对象的内存布局

xiaoxiao2021-02-28  85

【C++学习】 VS2012 使用命令行选项查看对象的内存布局

前面一篇文章中,我们对C++的对象内存布局进行了分析,不过是通过猜测,然后自己写代码进行验证的,其实Visual Studio 2012(VS2012)提供了一个新的选项,给用户显示C++对象在内存中的布局。 这个选项就是/d1reportSingleClassLayout。 具体使用方法如下,在写好相应的cpp文件之后,需要启动VS2012的命令行工具“Visual Studio 2012 Command Prompt”,(在工具下面:Visual Stdio命令提示),如下图所示: 切换到cpp文件所在目录之后(cd命令),输入如下的命令:

cl [filename].cpp /d1reportSingleClassLayout[className]

cl当然就是MS的编译器咯;[filename].cpp就是你所想要查看的class所在的cpp文件(class定义在头文件也没关系,还是只要编译cpp文件即可);而你需要在最后加上[className],也就是你需要查看的class的类名。 直接用过一个简单的例子来感受下(main.cpp):

#include <iostream> using namespace std; class Base { public: int a; virtual void fcn() {}; }; class Derived : public Base { public: virtual void fcn2() {}; private: int d; void fcn3() { } }; int main(void) { }

我想查看Derived这个类的对象在内存中的布局,那么就可以用下面的命令行。

cl main.cpp /d1reportSingleClassLayoutDerived

结果显示如下:

可以看到class Derived的对象的内存布局,在派生类对象的开始包含了基类Base的对象,其中有一个虚表指针,指向的就是下面的Derived::$vftable@ (virtual function table),表中包含了Derived类中所有的虚函数。

我就不过多的举例了,甘心去的可以去尝试下,这个选项对我们分析C++对象的内存结构还是很有帮助的,让我们更好的理解C++。

转载请注明原文地址: https://www.6miu.com/read-23793.html

最新回复(0)