浅谈likely与unlikely

简介:

在linux内核代码中随处可见if语句中出现likely或unlikely,这两个东西是干什么的呢?

偶然看到有人问这个问题,自己也整理一下~

likely或unlikely用于优化条件语句,其一般用法为:


条件判断之后会有两个出口,一个是真,一个是假。然而编译生成的目标代码是扁平的,其中的一个出口必须通过跳转来实现。
考虑下面一个场景:
1、判断条件;
2、条件为真跳转到4;
3、进行条件为假时的处理;
4、进行条件为真时的处理;
可见,如果条件为真,多了一次JMP操作,并且由于JMP打断了处理器流水。

likely(x)和unlikely(x)的作用是用来指导编译的,让代码在大多数情况下不会发生JMP的情况。
比如,likely(x)就告诉编译器,x在大多数情况下的结果会是真,于是编译器生成的结果为真的出口不需要JMP。unlikely(x)类似~

突然又想到一个问题,其实likely和unlikely应该只对单条件的if语句才有意义的。如果是多个条件的复合,条件表达式值的计算本身就要通过JMP来选择真假出口,所以用不用likely都影响不大。


目录
相关文章
|
8月前
|
Java
Java中的卫语句
Java中的卫语句
173 0
|
XML Android开发 数据格式
android中SVG 的使用姿势
android中SVG 的使用姿势
1149 0
android中SVG 的使用姿势
|
Kubernetes 网络协议 数据安全/隐私保护
Kubernetes 的核心概念:Pod、Service 和 Namespace 解析
Kubernetes 的核心概念:Pod、Service 和 Namespace 解析
421 1
|
Linux Shell 开发工具
【杂七杂八】安利一个padOS上的linux小工具——iSH
【杂七杂八】安利一个padOS上的linux小工具——iSH
206 0
|
7月前
|
存储 Linux
深入了解Linux设备管理:字符、块和网络设备文件
深入了解Linux设备管理:字符、块和网络设备文件
187 0
|
8月前
|
Linux 编译器 C语言
Linux EXPORT_SYMBOL宏详解
Linux EXPORT_SYMBOL宏详解
Linux EXPORT_SYMBOL宏详解
|
网络协议 Linux C++
[笔记] libpcap编译及使用
[笔记] libpcap编译及使用
364 0
Linux驱动程序开发用户态和内核态 模块机制
Linux驱动程序开发用户态和内核态 模块机制
|
Linux 虚拟化
安装和使用qemu时遇到的典型问题
安装和使用qemu时遇到的典型问题
安装和使用qemu时遇到的典型问题
|
网络协议 C语言
arp、ethernet、icmp、udp、ip协议的C语言实现(计算机网络协议栈实验)
arp、ethernet、icmp、udp、ip协议的C语言实现(计算机网络协议栈实验)
529 0
arp、ethernet、icmp、udp、ip协议的C语言实现(计算机网络协议栈实验)

热门文章

最新文章