什么使虚拟功能如此缓慢? C ++

时间:2012-04-19 17:55:39

标签: c++ function refactoring virtual

  

可能重复:
  Virtual functions and performance - C++

我正在尝试重构我的代码,而且每个人都说使用虚拟函数是一个非常性能的huuuuge,为什么呢?还有另一种方法可以继承一个类并重新定义在基类中定义的函数吗?

2 个答案:

答案 0 :(得分:3)

可以在此处找到有关此主题的优秀参考文章:http://coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/3

对于懒惰,我猜答案是“可能稍微慢一些”

答案 1 :(得分:1)

虚函数通过vtable调用,它基本上是一个函数指针数组。因此,每次调用一个,都会有额外的数组查找。我不确定我是否称之为 huuuuge nono,但一般来说它们应该非常快。

来自维基百科

  

虚拟呼叫至少需要一个额外的索引取消引用,和   与非虚拟呼叫相比,有时会增加“修正”   只需跳转到编译指针即可。因此,调用虚拟   函数本质上比调用非虚函数慢。一个   1996年完成的实验表明约占6-13%   执行时间花在简单调度到正确的函数上,   虽然开销可高达50%。[4]虚拟的成本   由于太多,现代CPU架构上的功能可能不是那么高   更大的缓存和更好的分支预测。