序言
首先感谢bolow大神的指导,他教会我查看Visual Studio下C++内存布局的方法,不敢独享,特此分享。
1. Visual Studio命令行查看内存布局的方法
cl Test.cpp /d1reportSingleClassLayoutBase
比如你新建了一个源文件Test.cpp,里面有一个类Base,那么上面的命令就能查看类Base的内存布局了。当然,这里我假设你会用Visual Studio编译工具cl,如果不会,可以参考博主博客《[C++基础]042_用Visual Studio的命令行编译源码》。
看图认识C++内存布局
以下图片所展示的内存布局主要有:单纯类,有虚函数的复杂类,有继承关系的单纯类,有虚函数有继承关系的复杂类,多重继承类,钻石型继承类。
虽然类Base里有foo函数,但是我们的内存布局里没有函数的位置,这是为什么呢?参见博主另篇博客《[C++基础]044_C++的成员函数本质》
这里我们有虚函数了,不过虚函数也只是占用4个字节。无论你有多少个虚函数,仍然是占4个字节。因为它只是个指向虚函数表的指针而已。
有继承关系时,子类的头部是基类的内存布局。
有虚函数的继承关系时,第一个存储的仍然是虚函数表指针。
多重继承,不过,注意一下,这里有两个虚函数表指针,切记。
钻石型继承关系,也不难,就是往里面死命的填。
其他博文推荐
C++ 对象的内存布局(上):http://blog.csdn.net/haoel/article/details/3081328
C++ 对象的内存布局(下):http://blog.csdn.net/haoel/article/details/3081385