您现在的位置是:首页 >技术教程 >C++编译期优化 ---分支预计__builtin_expect网站首页技术教程

C++编译期优化 ---分支预计__builtin_expect

tadus_zeng 2025-12-30 12:01:02
简介C++编译期优化 ---分支预计__builtin_expect

在编写程序逻辑的时候,使用了大量的if-else 分支,为了程序尽可能的高效运行,会考虑把可能性更高的条件写在前面,这样程序的平均运行时间会更短。
gcc提供了一种方式,可以让编译器自行优化
__builtin_expect(expr,bool)

当bool为真时即__builtin_expect(expr,true),这是告诉编译器expr为真的可能性更大,编译后这个分支会在前面。
当bool为假时即__builtin_expect(expr,false),这是告诉编译器expr为真的可能性很小,编译后这个分支会在后面。

应用例子

/**
 * __builtin_expect macros
 */
#if !defined(__GNUC__)
#  define __builtin_expect(x, y) (x)
#endif

#ifndef likely
#  ifdef __GNUC__
#    define likely(x)   __builtin_expect(!!(x), 1)
#    define unlikely(x) __builtin_expect(!!(x), 0)
#  else
#    define likely(x)   (x)
#    define unlikely(x) (x)
#  endif
#endif

int main()
{
	int i = 1;
	if (unlikely(i==0))
	{
		// ...
	}
	else
	{
		// ...
	}
	return 0;
}

上面代码中!!(x)这是c/c++中表达式转成bool类型的一种技巧,
if (unlikely(i==0))这一分支在编译成汇编时会放在后面,会优先判断i!=0的情况。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。