0

可能重复:
虚函数和性能 - C++

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

4

2 回答 2

3

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

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

于 2012-04-19T18:00:27.720 回答
1

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

来自维基百科

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

于 2012-04-19T17:58:36.120 回答