经常检查返回类型是否有错误。但是,将继续执行的代码可以通过不同的方式指定。
if(!ret)
{
doNoErrorCode();
}
exit(1);
或
if(ret)
{
exit(1);
}
doNoErrorCode();
重量级 CPU 可以使用简单的统计来推测在附近/位置附近采取的分支 - 我研究了一种用于分支推测的 4 位机制 (-2,-1,0,+1,+2),其中零是未知的,并且2 将被视为真正的分支。
考虑到上面的简单技术,我的问题是如何构建代码。我认为主要编译器和主要体系结构之间必须有一个约定。这是我的两个问题
不同 CPU 的行为有所不同,编译器经常对指令重新排序。 您将在这些手册中找到所需的所有信息:http://agner.org/optimize/。
在我看来,了解发生情况的唯一方法是读取编译器生成的汇编代码。
在 gcc 上,您可以使用
__builtin_expect
为编译器提供分支预测信息。为了使其稍微容易一些,您可以借用可能/不太可能使用的宏,例如在 Linux 内核中:
#定义可能(x) __builtin_expect((x),1) #定义不太可能(x) __builtin_expect((x),0)
然后例如
if (unlikely(!some_function())
error_handling();