可能重复:
Virtual functions and performance - C++什么让虚拟功能如此缓慢? C++
我想修改我的代码,到处有人说,使用虚拟函数是一个huuuuge NONO的性能,明智的,为什么呢?有没有另一种方法可以继承一个类并重新定义基类中定义的函数?
可能重复:
Virtual functions and performance - C++什么让虚拟功能如此缓慢? C++
我想修改我的代码,到处有人说,使用虚拟函数是一个huuuuge NONO的性能,明智的,为什么呢?有没有另一种方法可以继承一个类并重新定义基类中定义的函数?
这个主题一个很好的参考文章可以在这里找到:http://coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/3
对于懒惰,我想答案是“可能稍微慢”
虚拟函数通过vtable调用,它基本上是一个函数指针数组。所以,每次被调用时,都会有一个额外的数组查找。我不确定我是否可以称其为huuuuge nono,但通常它们应该非常快。
从维基百科:
虚拟呼叫至少需要一个额外的索引解引用,并 有时一个“修正”此外,相比于非虚拟呼叫,这是 只是跳转到一个编译指针。因此,调用虚拟函数本质上比调用非虚函数要慢。在1996年完成的一个 实验表明,尽管开销可以高达50%,但执行时间的大约6-13%仅用于调度到正确的功能 。[4]在现代CPU体系结构中虚拟 函数的成本可能不会那么高,这是由于更大的缓存和更好的分支预测。
这是实现定义,但大多数实现这样做。 – 2012-04-19 17:59:39
我也猜测自1996年以来,编译器已经走过了很长一段路:) – 2012-04-19 18:04:05
谁告诉你的? – 2012-04-19 17:56:33
你确实有性能问题吗? – 2012-04-19 18:12:42