可以在Visual Studio C++ 编译输出中直接看C++内存布局:工程项目——右键“属性”——配置属性——C/C++——命令行——其他选项里添加“/d1reportAllClassLayout ”,即可在编译输出中查看定义的类的内存布局,上面是输出所有定义的类对象,你可以搜索你自己定义的对象。(最好不要把名字定为base,不然一大堆)。
在C++对象模型中,Nonstatic data members 被配置于每一个 class object 之内,static data members 则被存放在个别 class object 之外。Static 和nonstatic function members 也被放在个别的class object 之外。存在 virtual function 时,每个class 会产生出一堆指向 virtual function 的指针,这些指针存放在一个表中,称之为虚函数表 virtual table。其实质就是一个函数指针数组,里面存放的是虚函数指针。每一个 class object 被安插一个虚表指针 vptr,指向相关的 virtual table,虚表指针通常置于 class object 的第一位置。另外,当子类虚继承父类时,子类对象中还会安插虚基类指针。注意此处 class 和 class object 的区别。如此说来一个类实例当中存放的就是 nonstatic data member,虚表指针(存在虚函数时或父类中含有虚函数),虚基类指针(虚拟继承时)。类继承时体积会变大,但在虚拟继承的情况下,基类永远只存在一个实例。