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 次 |
最近记录: |