linux-kernel之likely和unlikely

在阅读linux源代码的时候,我们经常会发现likely和unlikely,这两个宏语句定义在compiler.h下,

#define likely(x) __builtin_expect(!!(x), 1)

#define unlikely(x) __builtin_expect(!!(x), 0)

这里我们需要先了解__builtin_expect:# define __builtin_expect(x, expected_value) (x)

所以可以发现其实likely(x)和x是一个意思,那么为什么还要费这么一个力气去做复杂化呢?

这都是为了提高系统的速度,当likely取代直接判断的时候,gcc编译器会知道likely的分支更加可能发生,那么我们把它放在前面,这样cache命中的概率也会增高,而如果是unlikely的话,那么这件事情可能就不会发生,我们就应该把它放在后面,通过这样的机制,等于是让上层将意识里更加容易发生的事情告诉系统从而提高了整体的运行速度,从整个系统来讲会有一定的优化

时间: 2024-10-21 12:40:52

linux-kernel之likely和unlikely的相关文章

ARM32 Linux kernel virtual address space

http://thinkiii.blogspot.jp/2014/02/arm32-linux-kernel-virtual-address-space.html The 32-bit ARM CPU can address up to 2^32 = 4GB address*. It's not big enough in present days, since the size of available DRAM on computing devices is growing fast and

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

Linux Kernel 开发报告 25 周年版

Linux基金会发布 2016 年度 Linux 内核开发报告,这次恰逢 Linux 内核 25 周年(腾云科技ty300.com),所以相比往年又更多的回顾性内容,值得一读. Linux 内核开发报告 2016 版 一些有趣的信息: 自 3.18 内核以来,合并自Linux Kernel内核的新功能覆盖面更为广泛,且涉及安全性的新功能越来越多 4.0 系列的引入仅仅是由于 Linus (基础教程qkxue.net)觉得小版本号已经超越正常人手指和脚趾数量的总和了.每一个内核版本发布都是传统意义

linux kernel 字符设备详解

有关Linux kernel 字符设备分析: 参考:http://blog.jobbole.com/86531/ 一.linux kernel 将设备分为3大类,字符设备,块设备,网络设备. 字符设备是指只能一个字节一个字节读写的设备, 常见的外设基本上都是字符设备. 块设备:常见的存储设备,硬盘,SD卡都归为块设备,块设备是按一块一块读取的. 网络设备:linux 将对外通信的一个机制抽象成一个设备, 通过套接字对其进行相关的操作. 每一个字符设备或块设备都在/dev目录下对应一个设备文件.l

Linux Kernel 4.7 RC2已发布

Linux内核(英语:Linux kernel),是一种计算机操作系统内核,以C语言和汇编语言写成,符合POSIX标准,以GNU通用公共许可证发布.Linux内核最早是由芬兰黑客林纳斯·托瓦兹为尝试在自己的英特尔x86架构计算机上提供自由免费的类Unix系统而开发的. Linus Torvalds于6月5号(星期天)宣布了Linux Kernel 4.7的第二个候选发布版本(rc2),而rc1的发布则是在5月29号那天,预计Linux Kernel 4.7会在7月的第二或第三周迎来稳定版.Lin

使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录

Linux kernel  的官方 GIT地址是: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git 可以从这个地址拿到 kernel 的 代码仓库. 1. 拿代码仓库 [plain] view plaincopyprint? git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git 2. 查看状态: [pla

Linux Kernel 4.2.2 编译安装教程

安装linux的最新内核其实不难,搞linux就不要怕尝试. 我配置是AMD Athlon X2 64 4600+的处理器和DDR2 2GB的内存条,系统为Xubuntu 15.04. 现在我与大家分享一下经验,由于我写这个帖子的时候,4.2.2是最新的正式版内核,所以就以4.2.2为例了. 首先去官网下载4.2.2的内核包,官网地址:https://www.kernel.org/ linux-4.2.2.tar.gz官网下载地址:https://www.kernel.org/pub/linux

linux kernel with param

Linux kernel support pass param to kernel, this params can be assigned at load time by insmod or modprobe.  or later read from /etc/modprobe.conf file. There are two macro : module_param and module_param_array, To declare an param or array param ,use

虚拟机安装中标麒麟3.2时报unkown filesystem,you need to load the linux kernel first

工作需要,在虚拟机上安装中标麒麟3.2的64位版本. 虚拟机用的VMware Workstation 9.0,按照常识目标DVD光盘文件的类型选择Other Linux 2.6.x Kernel 64-bit(因为目前大部分都是2.6.18的内核以上,尤其是Suse Linux等,所以惯性使然),Power On后,出现版本选择窗口, 点击后,没有出现令人激动的安装引导界面,但出现了"Unkown Filesystem"."you need to load the linux

linux kernel将关键信息保存到文件做法 很好的调试方法

linux kernel将关键信息保存到文件做法      很好的调试方法 下面有2个示例: 1:保存机器从开机到结束的VBATT: 2:保存uart接收到的数据到文件: 意义不多说了. 以下是代码: #include <linux/fs.h> #include <asm/uaccess.h> #include <asm/unaligned.h> static struct file *fp =NULL; int write_to_file (char *buf, in