Gui*_*ira 5 c++ performance virtual-functions boost-function
我想知道与一个相同的boost :: function调用相比,单继承虚函数调用的速度有多快.它们的性能几乎相同,还是boost :: function慢?
我知道性能可能因情况而异,但是,作为一般规则,哪个更快,哪个程度如此之大?
谢谢,Guilherme
- 编辑
KennyTM的测试对我来说足够令人信服.对于我自己的目的,boost :: function似乎并不比vcall慢得多.谢谢.
作为一个非常特殊的情况下,考虑调用一个空函数10 9倍.
代码A:
struct X {
virtual ~X() {}
virtual void do_x() {};
};
struct Y : public X {}; // for the paranoid.
int main () {
Y* x = new Y;
for (int i = 100000000; i >= 0; -- i)
x->do_x();
delete x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码B :(增强1.41):
#include <boost/function.hpp>
struct X {
void do_x() {};
};
int main () {
X* x = new X;
boost::function<void (X*)> f;
f = &X::do_x;
for (int i = 100000000; i >= 0; -- i)
f(x);
delete x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译g++ -O3,然后与时间time,
检查汇编代码,似乎缓慢可能是由于异常和处理可能性,并且f可能是NULL.但鉴于一次boost::function通话的价格仅为2.4纳秒(在我的2 GHz机器上),你的实际代码do_x()可能会影响到这一点.我想说,这不是一个避免的理由boost::function.