1

经常检查返回类型是否有错误。但是,可以以不同的方式指定将继续执行的代码。

if(!ret)
{
   doNoErrorCode();
}
exit(1);

或者

if(ret)
{
   exit(1);
}
doNoErrorCode();

重量级 CPU 可以使用简单的统计数据来推测接近/局部的分支的一种方法——我研究了一种用于分支推测的 4 位机制 (-2,-1,0,+1,+2),其中 0 是未知的,而 2将被视为一个真正的分支。

考虑到上面的简单技术,我的问题是关于如何构造代码。我假设主要编译器和主要架构之间必须有一个约定。这是我的两个问题

  1. 当代码不是一个经常访问的循环时,当管道被填充时哪个布尔值有偏差?
  2. 关于分支的推测必须从真或假或零开始(管道必须充满一些东西)。可能是哪个?
4

2 回答 2

2

CPU 的行为各不相同,编译器经常对指令重新排序。您将在这些手册中找到您需要的所有信息:http: //agner.org/optimize/

在我看来,知道发生了什么的唯一方法是阅读编译器生成的汇编代码。

于 2009-12-02T14:53:05.450 回答
2

在 gcc 上,您可以使用__builtin_expect为编译器提供分支预测信息。为了使它稍微容易一些,您可以借用例如在 Linux 内核中使用的可能/不太可能的宏:

#define possible(x) __builtin_expect((x),1)
#define 不太可能(x) __builtin_expect((x),0)

然后例如

if (unlikely(!some_function())
    error_handling();
于 2009-12-02T21:52:28.333 回答