您可以使用__builtin_expect
来提示GCC有关特定分支可能性的提示。没有它,它是否有任何默认假设。也就是说,将类似
if(error) { /*unlikely path*/ return FAILURE;}
return SUCCESS;
比以下更好/更差
if(!error) {/*likely path*/ return SUCCESS;}
return FAILURE;
答案 0 :(得分:1)
与任何现代编译器一样,gcc还将执行代码分析。如果代码分析产生了任何可用/可证明的信息,它将选择一些优化方法(参见基本块重排序)。 gcc至少会执行静态代码分析,而clang(也许使用扩展名)也会分析执行流程图。