在内核代码中通常不太可能出现,它们实际上是Linux /编译器中定义的两个宏。



#定义可能(x)__builtin_expect(!!!(x),1)



#定义可能__builtin_expect((x)!!!(x),0)



的__built_expect()函数是内置在GCC的功能。



至于为什么在内核代码中使用这两个宏,主要目的是优化代码并提高系统执行速度。



例如:



如果(可能(a)){



需要();



}



如果(不可能)



大脑();



}



这是程序员可以确定> B在程序执行过程中可能会出现比较大的,所以使用可能需要()()将告诉编译器功能背后的二进制代码是在程序的前面,如在预取数据缓存可以被需要()函数在二进制代码获取缓存,缓存的命中率也增加。



同样,不可能()的作用是告诉编译器



我们不必混淆可能和不可能,我们需要知道的是,如果(可能(A))和(如果)在功能上是等价的,如果(不可能(a)(a))。



例如,下面的代码:



#包括



#定义可能__builtin_expect((x)!!!(x),0)



#定义可能(x)__builtin_expect(!!!(x),1)



主()



{



int=2,b=4;



如果(不可能)



printf(在不太可能的,不是你的期待!;



其他{ }



printf(在不太可能的,是你的expectingn );



}



如果(可能)



printf(的可能,是你的expectingn );



}



返回0;



}



实施结果:



在不太可能,不是你的期望!



很可能是你的期望



总之,可能和不可能的功能是提高缓存命中率,提高系统执行速度。