拥有多个级别的基类会降低一个类的速度吗?A导出B导出C导出D导出F导出G,...
多重继承会降低类的速度吗?
发布于 2008-09-19 04:06:07
非虚函数-调用在运行时绝对不会影响性能,这符合c++的咒语,即你不应该为不使用的东西付费。在虚函数调用中,无论有多少继承级别或基类数量,通常都要为额外的指针查找买单。当然,这都是由实现定义的。
编辑:正如其他地方所指出的,在一些多继承场景中,在进行调用之前需要调整'this‘指针。Raymond Chen描述了COM对象的how this works。基本上,在从多个基础继承的对象上调用虚拟函数可能需要在虚拟调用所需的额外指针查找之上进行额外的减法和jmp指令。
发布于 2008-09-19 04:07:18
深层继承层次结构增加了不必要的复杂性,极大地增加了维护负担,迫使用户学习许多类的接口,即使他们只想使用特定的派生类。它还会对内存使用和程序性能产生影响,因为它会添加不必要的vtable,并间接指向不真正需要vtable的类。如果你发现自己经常创建深层继承层次结构,你应该回顾一下你的设计风格,看看你是否养成了这个坏习惯。如果你不相信这一点,但认为“没有很多继承就不是”,那么C++标准库本身就是一个很好的反例。-- Herb Sutter
发布于 2008-09-19 04:26:02
的速度
正如多次提到的,深度嵌套的单一继承层次结构不应该对虚拟调用施加额外的开销(高于任何虚拟调用的开销)。
但是,当涉及多继承时,通过基类指针调用虚函数时,有时会有非常轻微的额外开销。在这种情况下,一些实现让虚函数通过一个小的thunk来调整' this‘指针,因为
(static_cast<Base*>( this) == this)不一定是真的,这取决于对象布局。
请注意,所有这些都非常依赖于,非常依赖于实现。
请参阅Lippman的“C++对象模型内幕”第4.2章-- MI下的虚拟成员函数/虚拟函数
https://stackoverflow.com/questions/99510
复制相似问题