use*_*339 1 c gcc gnu clang branch-prediction
具体来说,我问的是双“!” 在 __built_in 的参数中。
按照“C”语言,它是双重否定吗?
这!!只是两个!相邻的操作员。这是将任何非零值转换为1并保持0原样的简单方法。(又名“布尔化”值)。看!!c 运算符,是两个 NOT 吗?在 的上下文之外对一般逻辑运算符进行更多讨论__builtin_expect。
!!(x)想要__builtin_expect我们想告诉编译器 很x可能是非零,而不是x很可能恰好是1。x != 0这是告诉编译器期望与 之间的区别x == 1,这对于同一函数中的其他代码可能很重要。
我们同样可以写成__builtin_expect( (x)!=0, 1 ).
的第二个参数__builtin_expect是编译器应该期望第一个表达式等于的值。这不仅限于布尔值;请参阅GCC 的 __builtin_expect 能走多远?用于使用 0 或 1 以外的期望值。
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |