#define unlikely(x) __builtin_expect(!!(x), 0) 可以看出这2个宏都是使用函数__builtin_expect()实现的,__builtin_expect()函数是GCC的一个内建函数(build-in function). 二、分析 你期望exp表达式的值等于常量c,看c的值, 如果c的值为0(即期望的函数返回值), 那么 执行 if 分支的的可能性小,如...
函数__builtin_expect()是GCC v2.96版本引入的, 其声明如下: long __builtin_expect(long exp, long c); 1. 2.1. 功能描述 由于大部分程序员在分支预测方面做得很糟糕,所以GCC 提供了这个内建函数来帮助程序员处理分支预测. 你期望exp表达式的值等于常量c,看c的值, 如果c的值为0(即期望的函数返回值),...
#define unlikely(x) __builtin_expect(!!(x), 0) 1. 2. 以上两个宏定义核心就是__builtin_expect函数,因此需要先搞清楚__builtin_expect函数。 函数__builtin_expect()是GCC v2.96版本引入的,其声明如下: long __builtin_expect(long exp, long c...
1#endif#ifdefined(EXPECT_RESULT) && defined(DONT_EXPECT)#error"Specifying both EXPECT_RESULT and DONT_EXPECT makes no sense"#endif/* 给代码添加了一些看似不必要的复杂性, 只是为了让优化器的任务变很难优化__builtin_expect 在这个特定的程序中,需要以下所有内容: * 在main函数中调用一个noinline函数...
__builtin_expect函数的语法如下: 代码语言:c 复制 long __builtin_expect(long exp, long c) 其中,exp是一个表达式,表示某个条件的概率;c是一个常量,表示该条件的期望结果。 __builtin_expect函数的返回值是exp的值,但是编译器会根据c的值对代码进行优化。如果c的值与exp的值相等,编译器会认为该条件经常...
宏_G_BOOLEAN_EXPR的作用是把expr转换为0和1,即真假两种。要理解宏G_LIKELY和G_UNLIKELY ,很明显必须理解__builtin_expect。__builtin_expect是GCC(version>=2.9)引进的宏,其作用就是帮助编译器判断条件跳转的预期值,避免跳转造成时间乱费。拿上面的代码来说: ...
参数c 跟这个函数的返回值无关,无论 c 为何值,函数的返回值都是 exp。 int main(void) { int a; a = __builtin_expect(3,1); printf("a = %d\n",a); a = __builtin_expect(3,10); printf("a = %d\n",a); a = __builtin_expect(3,100); printf("a = %d\n",a)...
这个内置函数可以通过 GNU C/C++__builtin_expect函数进行移植。该内置函数的原型如下:long __builtin_...
GCC内建函数__builtin_expect实现这个内建函数的语义是exp的预期值是c编译器可以根据这个信息适当地重排语句块的顺序使程序在预期的情况下有更高的执行效率 GCC内建函数__builtin_expect实现 ++++ include/linux/compiler.h 13: #define likely(x) __builtin_expect((x),1) 14: #define unlikely(x) __...
内置函数: long __builtin_expect (long exp, long c) 您可以使用 __builtin_expect 为编译器提供分支预测信息。一般来说,您应该更喜欢为此使用实际的配置文件反馈( -fprofile-arcs ),因为众所周知,程序员...