Mus*_*ful 6 c++ performance short-circuiting compiler-optimization branch-prediction
考虑以下循环:
while((expressionA) & (expressionB)){
// do something
}
Run Code Online (Sandbox Code Playgroud)
while((expressionA) && (expressionB)){
// do something
}
Run Code Online (Sandbox Code Playgroud)
其中expressionA和expressionB是类型的表达bool和expressionB不具有副作用.在这些条件下,这两种情况都是为-如果换算后(右?).
一个(假设的)编译器天真地从源代码中获取其提示将在&&版本中放置一个分支,我们最终将支付分支预测失败.
使用现代编译器(例如当前的GCC),是否有任何条件可以使&版本在版本上获得显着的性能提升&&?
我的猜测是否定的,因为:
expressionB足够便宜,编译器将识别这一点并避免创建短路分支.expressionB足够昂贵,编译器将创建短路,因为:
expressionA不接近1.0,我们可以从短路中获得可观的平均性能增益.expressionA接近1.0,我们将不会支付太多,因为分支预测将趋于成功.| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |