在我的类设计中,我广泛使用抽象类和虚函数。我感觉虚拟功能会影响性能。这是真的?但我认为这种性能差异并不明显,看起来我正在做过早的优化。对?
3 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
一个好的经验法则是:
在你证明这一点之前,这不是一个性能问题。
虚函数的使用对性能影响很小,但不太可能影响应用程序的整体性能。寻找性能改进的更好地方是算法和I / O.
一篇关于虚函数(以及更多)的优秀文章是成员函数指针和最快可能的C ++代表。
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
在性能非常关键的应用程序(如视频游戏)中,虚拟函数调用可能太慢。使用现代硬件,最大的性能问题是缓存未命中。如果数据不在缓存中,则在可用之前可能需要数百个周期。
当CPU获取新函数的第一条指令并且它不在缓存中时,正常函数调用可以生成指令缓存未命中。
虚函数调用首先需要从对象加载vtable指针。这可能导致数据缓存未命中。然后它从vtable加载函数指针,这可能导致另一个数据缓存未命中。然后它调用可能导致指令高速缓存未命中的函数,如非虚函数。
在许多情况下,两个额外的缓存未命中并不是一个问题,但在性能关键代码的紧密循环中,它可以大大降低性能。
- 3 回答
- 0 关注
- 599 浏览
添加回答
举报
0/150
提交
取消