【发布时间】:2012-05-01 07:30:51
【问题描述】:
我正在尝试重构我的代码,而且到处有人说使用虚函数在性能方面是一个很大的问题,为什么?还有其他方法可以继承一个类并重新定义基类中定义的函数吗?
【问题讨论】:
-
你真的有性能问题吗?
标签: c++ function refactoring virtual
我正在尝试重构我的代码,而且到处有人说使用虚函数在性能方面是一个很大的问题,为什么?还有其他方法可以继承一个类并重新定义基类中定义的函数吗?
【问题讨论】:
标签: c++ function refactoring virtual
可以在此处找到有关此主题的良好参考文章:http://coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/3
对于懒人,我猜答案是“可能会慢一点”
【讨论】:
通过vtable 调用虚拟函数,它基本上是一个函数指针数组。因此,每次调用一个时,都会进行一次额外的数组查找。我不确定我是否会称其为 huuuuge nono,但总的来说它们应该很快。
来自维基百科:
虚拟调用至少需要一个额外的索引取消引用,并且 与非虚拟调用相比,有时是“修复”添加,即 只是跳转到编译指针。因此,调用虚拟 函数本质上比调用非虚拟函数慢。一个 1996 年进行的实验表明,大约 6-13% 执行时间仅用于分派到正确的函数, 尽管开销可能高达 50%。[4]虚拟的成本 由于太多,现代 CPU 架构上的功能可能不会那么高 更大的缓存和更好的分支预测。
【讨论】: