类成员函数与函数关于速度

时间:2011-12-12 12:58:19

标签: c++

  

可能重复:
  Virtual Functions and Performance C++

这是正确的,类成员函数比简单函数花费更多时间吗?如果使用继承和虚函数怎么办?

我试图将我的函数收集到一个简单的接口类中(只有成员函数,没有数据成员),看来我浪费时间。 有办法解决吗?

P.S。我正在检查gcc和icc编译器并使用-O3选项。

4 个答案:

答案 0 :(得分:9)

过早优化是万恶之源

非静态成员函数接受一个额外的参数,该参数是调用该函数的对象(指向它的指针或引用)。这是一个开销。如果函数是虚函数,那么在多态调用的情况下也存在一个小的间接,即,将函数索引添加到虚拟表基本偏移量。这两个“开销”都是可以忽略不计的,你不应该担心,除非探查者说这是你的瓶颈。最有可能的不是。

过早优化是万恶之源

答案 1 :(得分:4)

成员函数,如果它们不是虚拟的,则与自由函数相同。它的调用没有开销。

但是,在virtual成员函数的情况下,存在开销,因为它涉及间接,即使这样,当通过指针调用虚函数时它也会变慢引用(称为多态调用)。否则,如果调用不是多态,则没有区别。

答案 2 :(得分:2)

成员函数不会有额外的时间惩罚。虚函数略慢但不是很多。除非你运行一个非常紧凑的循环,否则即使虚函数开销也可以忽略不计。

答案 3 :(得分:2)

对于正常功能来说,它足够“跳”到它们,这非常快。普通成员函数也是如此。另一方面,虚函数,跳转到的地址必须从表中获取,这当然涉及更多的机器代码指令,因此会更慢。但是,差异可以忽略不计,甚至难以衡量。

换句话说,不要担心。如果你有减速,那么最有可能(比如99,999%)别的东西。使用分析器找出位置。