经常检查返回类型是否有错误。但是,可以以不同的方式指定将继续执行的代码。
if(!ret)
{
doNoErrorCode();
}
exit(1);
或
if(ret)
{
exit(1);
}
doNoErrorCode();
重量级CPU的一种方式可以使用简单的统计数据推测近距离/局部采取的分支 - 我研究了分支推测的一个4位机制(-2,-1,0,+ 1,+ 2),其中零是未知和2将被视为真正的分支。
考虑到上面的简单技术,我的问题是关于如何构造代码。我假设主要编译器和主要架构之间必须有一个约定。这是我的两个问题
答案 0 :(得分:2)
行为因CPU而异,编译器通常会重新排序指令。 您可以在这些手册中找到所需的所有信息:http://agner.org/optimize/。
在我看来,知道发生了什么的唯一方法是阅读编译器生成的汇编代码。
答案 1 :(得分:2)
在gcc上,您可以使用__builtin_expect
为编译器提供分支预测信息。为了使它更容易,你可以借用可能的/不太可能使用的宏,例如在Linux内核中:
#define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0)
然后例如
if (unlikely(!some_function())
error_handling();