2012-04-19 56 views

回答

1

虚拟函数通过vtable调用,它基本上是一个函数指针数组。所以,每次被调用时,都会有一个额外的数组查找。我不确定我是否可以称其为huuuuge nono,但通常它们应该非常快。

维基百科

虚拟呼叫至少需要一个额外的索引解引用,并 有时一个“修正”此外,相比于非虚拟呼叫,这是 只是跳转到一个编译指针。因此,调用虚拟函数本质上比调用非虚函数要慢。在1996年完成的一个 实验表明,尽管开销可以高达50%,但执行时间的大约6-13%仅用于调度到正确的功能 。[4]在现代CPU体系结构中虚拟 函数的成本可能不会那么高,这是由于更大的缓存和更好的分支预测。

+0

这是实现定义,但大多数实现这样做。 – 2012-04-19 17:59:39

+0

我也猜测自1996年以来,编译器已经走过了很长一段路:) – 2012-04-19 18:04:05