另见 为什么英特尔这些年来改变了静态分支预测机制?: 因为 Sandybridge 根本不使用静态预测,所以我们可以从性能实验中看出来,这些性能实验试图对 CPU 的工作进行逆向工程。(当动态预测失败时,许多较老的 CPU 使用静态预测作为后备。通常的静态预测是不采用前向分支,而采用后向分支(因为后向分支通常是循环分支)
使用 GNU C 的 __builtin_expect的 likely()/unlikely()宏的效果(就像 Drakosha 的回答中提到的那样)使得 没有直接将 BP 提示插入到高潮 中。(在 gcc -march=pentium4中可能会这样做,但是在编译其他内容时不会)。
实际效果是布局代码,使得快速路径具有更少的已采用分支,也许总指令更少。这将有助于在静态预测发挥作用的情况下进行分支预测(例如,动态预测器是冷的,在确实退回到静态预测的 CPU 上,而不是仅仅让分支在预测器缓存中彼此别名)