正确使用__builtin_expect

时间:2014-06-06 22:31:31

标签: c++

我对__builtin_expect应该是一个规范的案例,但我似乎无法使其发挥作用,我正在寻找有关如何最好地利用该技术的任何建议。

我有一个

形式的功能
void function() {

  // Do some stuff

  if (__builtin_expect((cond1),0)) {
     // Do something expensive
  }

  if (__builtin_expect((cond2),0)) {
    // Do something expensive
  }

  if (__builtin_expect((cond3),0)) {
    // Do something expensive
  }

}

其中// Do something expensive指的是堆栈扩展的内存分配,复制和释放。现在cond1cond2cond3非常罕见,理想情况下只在第一次调用函数时,我希望__builtin_expect能确保分支得到适当优化。

不幸的是,在if语句中使用非常重要的代码会大大减慢我的代码,即使使用__builtin_expect也是如此,即使条件在执行期间永远不是真的。我错误地使用了__builtin_expect吗?是否有很少的优化空间,因为语句是在函数的末尾?我已尝试将// Do something expensive代码包装在单独的函数及其各种排列中,但也没有成功。

如果它是相关的我在i7上使用clang 3.4。

感谢您的帮助。

0 个答案:

没有答案