如何解决C ++分支预测提示
考虑两个等效功能
void foo( )
{
if( unlikely_case )
return;
// foo code
}
void foo( )
{
if( !unlikely_case )
{
// foo code
}
}
很明显,编译器无法确定哪种情况更可能发生-但我提前知道。
我觉得我应该以后一种形式构造代码,因为它支持我对分支预测的了解。
问题是这可能变得很丑
void foo( )
{
if( !sanity_check[ 0 ] )
return;
if( !sanity_check[ 1 ] )
return;
if( !sanity_check[ 2 ] )
return;
// foo code
}
vs
void foo( )
{
if( sanity_check[ 0 ] )
if( sanity_check[ 1 ] )
if( sanity_check[ 2 ] )
{
// foo code
}
}
是否可以使用关键字让编译器知道哪种情况更有可能(可能取决于编译器)? 如果不是,在为分支预测优化代码时,编译器是否会考虑这些健全性检查情况? 我是否应该习惯于金字塔形的后面的代码?
出于这个问题,请仅考虑最受欢迎的编译器,例如MSVC,GCC,clang等。
解决方法
是的,请使用__builtin_expect
内置函数,请查看更多信息here。
通常,首先写最可能的if
分支,然后才执行(例如,对于switch
块可能不是这样)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。