C ++中的非虚拟与虚函数调用效率

时间:2015-07-10 21:36:06

标签: c++ virtual

阅读虚函数,我遇到了以下概念:“C ++非虚函数调用在编译时使用静态绑定解析,而虚函数调用在运行时通过动态绑定解析。”

我的问题是:1)如果我们的程序中有大量的虚函数调用,它会对性能产生很大的影响,因为它们是在运行时进行评估的吗?或者它与现代机器无关?

2)这个数字是否依赖于堆栈?

2 个答案:

答案 0 :(得分:1)

速度慢吗?明确地。重要吗?并不是的。大多数现代OO语言默认都有动态调度,这意味着所有函数都是虚拟的,并且它们仍然适度快。宽大地使用它,但不是不必要的。

答案 1 :(得分:1)

一般来说,引用vtable来获取对象的函数地址的成本可以忽略不计。

但是,与其他任何事情一样,这取决于您的申请。一个好的经验法则是,如果您正在设计一个知道的类将对速度至关重要,那么请考虑这类问题。否则,担心更大的事情。