首页 > 系统相关 >Linux内核中unlikely宏的作用

Linux内核中unlikely宏的作用

时间:2024-11-21 22:06:43浏览次数:1  
标签:代码 编译器 内核 Linux 表达式 unlikely

Linux内核中unlikely宏的作用

在Linux内核中,unlikely宏是一个非常重要的工具,它主要用于 指导编译器进行代码优化,以提高程序的执行效率。

unlikely宏的定义与作用

  • 定义: unlikely宏通常定义为 __builtin_expect(!!(x), 0),其中x是你要判断的表达式。
  • 作用: 告诉编译器,表达式x的结果很不可能为真。

编译器的优化

当编译器看到unlikely宏时,它会认为该表达式为假的可能性更大。因此,它会对代码进行如下优化:

  • 分支预测: 编译器会将unlikely表达式对应的分支代码放置在分支预测不太可能执行的位置,以减少分支预测错误带来的性能损失。
  • 指令重排序: 编译器可能会将unlikely表达式对应的代码块移动到其他位置,以减少指令流水线的停顿。

使用场景

  • 错误处理: 错误处理代码通常执行的频率较低,使用unlikely可以提示编译器将错误处理代码放在分支预测不太可能执行的位置。
  • 特殊情况判断: 某些特殊情况下的判断,例如空指针检查、数组越界检查等,发生的概率较低,使用unlikely可以优化代码。
  • 性能敏感代码: 在一些对性能要求很高的代码中,使用unlikely可以帮助编译器生成更高效的代码。

示例

if (unlikely(list == NULL)) {
    // 处理空链表的情况
    return -ENOMEM;
}

在上面的代码中,我们认为链表为空的情况比较少见,因此使用unlikely告诉编译器,当list为NULL时,进入if分支的概率较小。

注意

  • unlikely宏只是给编译器一个建议,编译器不一定按照建议进行优化。
  • 过多的使用unlikely宏可能会干扰编译器的优化,因此应该谨慎使用。
  • unlikely的配对宏是likely,表示表达式很可能为真。

总结

unlikely宏通过提供分支预测信息,帮助编译器生成更高效的代码,从而提高程序的性能。在Linux内核中,unlikely宏被广泛应用于各种场景,以优化内核代码。
但是判断为真,还是会进入该逻辑函数中。

标签:代码,编译器,内核,Linux,表达式,unlikely
From: https://www.cnblogs.com/linhaostudy/p/18561674

相关文章

  • Linux内核中的PAGE_SHIFT
    Linux内核中的PAGE_SHIFT什么是PAGE_SHIFT?在Linux内核中,PAGE_SHIFT是一个非常重要的宏,它定义了一个页的大小,通常是2的幂次方。这个值表示了虚拟地址空间中一个页的偏移量占用了多少位。换句话说,它告诉我们一个页的大小是多少字节。PAGE_SHIFT的作用页大小的确定:PAGE_SHIFT......
  • [Linux]进程控制
    进程控制进程创建fork函数作用fork函数的作用是用来创建一个新进程,新进程被称为子进程,而原来的进程称为父进程。返回值fork函数有两个返回值,给父进程返回子进程pid,给子进程返回0。为什么有两个返回值?在执行fork函数的时候,当fork函数的核心逻辑已经执行完成,准备return时,......
  • Linux下 GDB调试器的使用
    文章目录1.可执行程序的Debug版和Release版区别一、编译选项与目的二、性能与体积三、功能与特性四、查看可执行文件2.GDB相关命令GDB常用命令1.可执行程序的Debug版和Release版区别一、编译选项与目的Debug版:编译选项:通常使用包含调试信息的编译选项,如/MDd......
  • 使用再生龙CloneZilla进行Linux系统的镜像完全封装和还原
    写文章  使用再生龙CloneZilla进行Linux系统的镜像完全封装和还原巴布改不掉晚睡的咸鱼​关注 71人赞同了该文章CloneZilla可以将Linux完整移植到另一台机器中,保证数据,分区,挂载,启动项。。所有的一切完全一致注意:进行还原的机器需要......
  • Linux基础——yum downgrade和yum localinstall降级安装
    一、问题描述需求:租户需要从openssl-1.1.1t-11降级安装openssl-1.1.1f-36,安装包相关依赖问题;报错:rpm安装提示依赖问题 报错:yumlocalinstall本地rpm包无法安装; 二、解决办法1、方法一:yumdowngrade降级#通过本地rpm包或在线yum源安装,加上参数“--allowerasing”允许......
  • 从0开始学习Linux——Shell编程详解【04】
     期目录:从0开始学习Linux——简介&安装从0开始学习Linux——搭建属于自己的Linux虚拟机从0开始学习Linux——文本编辑器从0开始学习Linux——Yum工具从0开始学习Linux——远程连接工具从0开始学习Linux——文件目录从0开始学习Linux——网络配置从0开始学习Linux——......
  • linux之磁盘管理
    磁盘管理1.磁盘分类机械硬盘:盘片主轴传动手臂做机械运动类似DVD固态硬盘:内部是主板和U盘类似2.硬盘大小3.5英寸:台式机2.5英寸:笔记本服务器3.硬盘接口IDE接口过时scsi接口过时sata接口台式机3.0nvme接口固态硬盘SAS接口企业级4.硬盘存储......
  • Linux中如何批量删除系统中所有的自建用户
    一、需求分析在Linux系统中,一般情况下,系统用户(如root、bin、daemon等)的用户ID(UID)通常是小于1000的。对于自建用户(非系统用户),UID一般从1000开始分配。不过,这不是绝对的规则,具体的UID范围可以由系统管理员在创建用户时指定,或者根据系统的用户管理配置文件(如/etc/login.de......
  • 【linux之clickhouse的问题记录】记由于clickhouse服务内存打满导致cpu/mem都飙升然后
    在记录相关文档的过程中发现监控中关于该节点的clickhouse数据异常,随后在node节点监控中也不见该节点信息于是找到相关机器进行检查,堡垒机发现无法连接clickhouse的节点,随后找同网段的机器尝试ping一下测试连通性,随后发现无法ping通错误信息:From172.21.0.1icmp_seq=1Destin......
  • Metasploit Pro 4.22.5-2024111901 (Linux, Windows) - 专业渗透测试框架
    MetasploitPro4.22.5-2024111901(Linux,Windows)-专业渗透测试框架Rapid7Penetrationtesting,releasedNov19,2024请访问原文链接:https://sysin.org/blog/metasploit-pro-4/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org世界上最广泛使用的渗透测试框......