c++ 虚拟继承的性能影响

我正在考虑在实时应用程序中使用虚拟继承.使用虚拟继承是否具有类似于调用虚函数的性能影响?所讨论的对象只能在启动时创建,但是我担心层次结构中的所有函数都将通过vtable发出,或者只有虚拟基类的函数才会被发送.
常见的实现将使对虚拟基类的数据成员的访问使用附加的间接方法.

正如James在他的评论中指出的,在多继承场景中调用基类的成员函数将需要调整该指针,并且如果该基类是虚拟的,则派生的基类子对象的偏移量类的对象取决于派生类的动态类型,需要在运行时计算.

这是否对现实世界的应用程序有明显的性能影响取决于许多事情:

虚拟基地有数据成员吗?通常,这是抽象的基类,需要从虚拟派生出来,而具有任何数据成员的抽象基础通常都是代码嗅觉.
假设你有数据成员的虚拟基地,那些在关键路径中访问的基础?如果用户点击GUI中的某些按钮导致了几十个附加条件,则没有人会注意到.
>如果避免虚拟基地,会有什么替代方案?不仅设计不好,替代设计也有可能产生性能影响.毕竟,它必须达到同样的目标,而且TANSTAAFL.然后,您为另一个加上劣质设计交易了一个性能损失.

附加说明:看看Stan Lippm的Inside the C++ Object Model,它们彻底地回答了这样的问题.

http://stackoverflow.com/questions/4899657/performance-impact-of-virtual-inheritance

转载注明原文:c++ 虚拟继承的性能影响