【问题标题】:What makes virtual functions so slow? C++ [duplicate]是什么让虚函数这么慢? C++ [重复]
【发布时间】:2012-05-01 07:30:51
【问题描述】:

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

我正在尝试重构我的代码,而且到处有人说使用虚函数在性能方面是一个很大的问题,为什么?还有其他方法可以继承一个类并重新定义基类中定义的函数吗?

【问题讨论】:

  • 你真的有性能问题吗?

标签: c++ function refactoring virtual


【解决方案1】:

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

对于懒人,我猜答案是“可能会慢一点”

【讨论】:

    【解决方案2】:

    通过vtable 调用虚拟函数,它基本上是一个函数指针数组。因此,每次调用一个时,都会进行一次额外的数组查找。我不确定我是否会称其为 huuuuge nono,但总的来说它们应该很快。

    来自维基百科

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

    【讨论】:

    • 这是定义的实现,但大多数实现都是这样做的。
    • 我也猜想编译器自 1996 年以来已经走了很长一段路:)
    猜你喜欢
    • 2013-08-21
    • 2011-11-14
    • 2019-11-07
    • 2011-10-10
    • 1970-01-01
    • 2013-09-04
    • 2011-04-15
    • 2013-07-15
    • 2022-12-04
    相关资源
    最近更新 更多