2009/6/22 兰鹏 <
lanpe...@gmail.com>:
__builtin_constant_p为gcc的内建函数,用于判断一个值是否为编译时常数,如果参数EXP 的值是常数,函数返回 1,否则返回 0。例如:
++++ include/asm-i386/bitops.h
249: #define test_bit(nr,addr) \
250: (__builtin_constant_p(nr) ? \
251: constant_test_bit((nr),(addr)) : \
252: variable_test_bit((nr),(addr)))
很多计算或操作在参数为常数时有更优化的实现,在 GNU C
中用上面的方法可以根据参数是否为常数,只编译常数版本或非常数版本,这样既不失通用性,又能在参数是常数时编译出最优化的代码。直接在config.h中定义:
#define __builtin_constant_p(x) (0)
__branch_check__(x, 1)怎么会找不到呢:
http://lxr.linux.no/linux+v2.6.29/include/linux/compiler.h#L84> 我想请问likely(x)和unlikely(x)是什么意思啊?
likely(x) 和unlikely(x)是用来对判断代码进行优化的,也就是说,如果这个判断被执行的几率很小时,可以使用unlikely(判断),编译器将在编译时对它进行相应的优化,这要涉及编译原理里的目标代码生成的时候jmp语句的放置问题了,likely相反。。
> 谢谢。
>
>
> >
>
--
不去想是否能成功,既然选择了远方,便只顾风雨兼程;不去想身后会不会袭来寒流,既然目标是地平线,留给世界的只能是背影。