Nat*_*mal 4 c++ performance boost
我正在做一些计时测试,我的一个测试是比较调用函数的不同方法.我用各种方法调用了N个函数.我尝试了常规函数调用,虚函数调用,函数指针和boost :: function.
我在Linux中使用gcc和-O3优化做到了这一点.
正如预期的那样,虚拟调用比常规函数调用慢.然而令人惊讶的是,boost :: function的速度比虚拟调用慢33%.
有没有其他人注意到这一点?任何线索,为什么这是?
常规功能可以内联编译器,如果有可能,但boost::function可以永远不会被内联.这是一个很大的不同.
第二个区别是,boost::function实现了类型擦除,这意味着它使用间接来调用实际的函数.意味着它首先调用一个虚函数,然后调用你的函数.所以通常它涉及(最少)两个函数调用(其中一个是virtual).这是巨大的差异.
因此,基于此分析,可以推断出这一点(甚至没有编写测试代码):
slowest ------------------------------------------------------> fastest
boost::function < virtual function < regular function
slowest ------------------------------------------------------> fastest
Run Code Online (Sandbox Code Playgroud)
在您的测试代码中确实如此.
请注意,它也是如此std::function(从C++ 11开始可用).
| 归档时间: |
|
| 查看次数: |
1217 次 |
| 最近记录: |