C++多继承和虚继承的内存布局(虚函数表不光有虚函数指针)


https://blog.csdn.net/yockie/article/details/50603236

警告. 本文有点技术难度,需要读者了解C++和一些汇编语言知识。 
在本文中,我们解释由gcc编译器实现多继承和虚继承的对象的布局。虽然在理想的C++程序中不需要知道这些编译器内部细节,但不幸的是多重继承(特别是虚拟继承)的实现方式有各种各样的不太明确的结论(尤其是,关于向下转型指针,使用指向指针的指针,还有虚拟基类的构造方法的调用命令)。 如果你了解多重继承是如何实现的,你就能预见到这些结论并运用到你的代码中。而且,如果你关心性能,理解虚拟继承的开销也是非常有用的。最后,这很有趣。 :-)

CodeSourcery, 特别是C++ ABI Summary, Itanium C++ ABI(不考虑名字,这些文档是在平台无关的上下文中引用的;特别低,structure of the vtables给出了虚函数表的详细信息)。 
libstdc++实现的动态类型转化,和同RTTI和命名调整定义在 tinfo.cc中。 
[2]libstdc++ 网站,特别是 C++ Standard Library API这一章节。 
[3]Jan Gray 写的C++: Under the Hood 
[4]Bruce Eckel的Thinking in C++(第二卷) 第9章”多重继承”。 作者允许下载这本书download.

【转自:http://www.oschina.net/translate/cpp-virtual-inheritance】