为了账号安全,请及时绑定邮箱和手机立即绑定

虚函数和性能 - C ++

虚函数和性能 - C ++

C++
呼唤远方 2019-09-19 09:43:30
在我的类设计中,我广泛使用抽象类和虚函数。我感觉虚拟功能会影响性能。这是真的?但我认为这种性能差异并不明显,看起来我正在做过早的优化。对?
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

一个好的经验法则是:


在你证明这一点之前,这不是一个性能问题。


虚函数的使用对性能影响很小,但不太可能影响应用程序的整体性能。寻找性能改进的更好地方是算法和I / O.


一篇关于虚函数(以及更多)的优秀文章是成员函数指针和最快可能的C ++代表。


查看完整回答
反对 回复 2019-09-19
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

在性能非常关键的应用程序(如视频游戏)中,虚拟函数调用可能太慢。使用现代硬件,最大的性能问题是缓存未命中。如果数据不在缓存中,则在可用之前可能需要数百个周期。

当CPU获取新函数的第一条指令并且它不在缓存中时,正常函数调用可以生成指令缓存未命中。

虚函数调用首先需要从对象加载vtable指针。这可能导致数据缓存未命中。然后它从vtable加载函数指针,这可能导致另一个数据缓存未命中。然后它调用可能导致指令高速缓存未命中的函数,如非虚函数。

在许多情况下,两个额外的缓存未命中并不是一个问题,但在性能关键代码的紧密循环中,它可以大大降低性能。


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 599 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信