c语言中的likely 与 unlikely使用

__builtin_expect 是 GCC 编译器提供的一个内建函数,用于帮助编译器优化条件跳转,提升程序的运行效率。

__builtin_expect 接收两个参数,如 __builtin_expect(EXP, N),其含义是 EXP == N 的概率很大。也就是说,这个函数用来告诉编译器,你预期 EXP 的值大概率会等于 N。

我们通常会将 __builtin_expect 封装为 likely 和 unlikely 两个宏,如下:

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

当 likely(x) 等于 true 的概率大时,可以使用 likely(x),编译器会优化代码,使得 if 后面的语句的机会更大,减小因跳转产生的开销。同样的,当 unlikely(x) 等于 true 的概率小的时候,使用 unlikely(x)

比如代码中对一种错误情况进行判断,并且这种错误情况发生的概率很低,那么可以使用 unlikely 进行判断。如:

if(unlikely(error_occurred)) {/* 错误处理 */
} else {/* 正常执行的代码 */
}

这样,编译器在生成指令时,会尽量减少因条件跳转而导致的CPU流水线清空,进而提高运行效率。但这种微小的优化在大多数应用程序中对性能的影响几乎可以忽略不计,通常在对性能要求极高的地方(如操作系统内核)才会使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试开发环境、测试环境、准生产环境、生成环境

在一个项目开发到发布的整个过程中,会使用到很多个环境进行测试和运行项目。最基本的开发环境、测试环境、准生产环境、生成环境 一、开发环境 开发环境顾名思义就是我们程序猿自己把项目放到自己的电脑上,配置好以后,跑起来项目&#xff0…

如何器测试IP池的质量?代理IP是怎么在问卷调查中应用的呢?

在数字时代,数据收集和分析变得日益重要,而问卷调查作为一种常见的数据收集工具,其效率和准确性直接影响着研究的可信度和有效性。为了实现这一目标,代理IP在问卷调查中的应用变得愈发关键。本文旨在探讨如何测试IP池的质量&#…

【InternLM 实战营笔记】LMDeploy量化internlm2-chat-20b模型

准备环境 拉取环境 /root/share/install_conda_env_internlm_base.sh lmdeploy激活环境 conda activate lmdeploy安装依赖库 # 解决 ModuleNotFoundError: No module named packaging 问题 pip install packaging # 使用 flash_attn 的预编译包解决安装过慢问题 pip instal…

真机测试——关于荣耀Magic UI系列HBuilder真机调试检测不到解决办法

​​​​​出现这种状况怎么办 1、开启USB调试 2、重点来了——我们要选择USB配置,选择音频来源 3、连接OK

95.Go设计优雅的错误处理(带堆栈信息)

在之前的两篇文章中,我们已经介绍过错误的一些优雅处理 75.错误码设计、实现统一异常处理和封装统一返回结果 88.Go设计优雅的错误处理 本文想继续写一篇,可以作为工具包直接使用。也是记录一种新的思路和编码技巧,同时创建错误的时候会自动…

vue3基础教程(2)——创建vue3+vite项目

博主个人微信小程序已经上线:【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 前言2.node版本检测3.创建vue项目 专栏简介 本系列文章由浅入深,从基础知识到实战开发,非常适合入门同学。 零基础读者也能成功由本系列文章入门&#x…

javascript数组排序的方法

目录 基本用法 按照数字大小排序 按照降序排序 按照字符串长度排序 按照对象属性排序 在JavaScript中,数组排序通常使用Array.prototype.sort()方法。这个方法会按照指定的顺序对数组的元素进行排序,并返回排序后的数组。如果未指定比较函数&#x…

Springboot配置MySQL数据库

Springboot配置MySQL数据库 一、创建springboot项目&#xff0c;并添加如下依赖 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope> </dependency>二、在applica…

基于springboot+vue的酒店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

实现session共享的方法总结完整版

文章目录 实现session共享的方法总结完整版1、使用共享数据库&#xff1a;2、使用粘性会话&#xff08;Sticky Session&#xff09;&#xff1a;3、使用缓存系统&#xff1a;4、使用分布式文件系统&#xff1a;5、使用中央认证服务&#xff1a;6、使用会话复制&#xff1a;7、使…

MongoDB聚合运算符:$dateFromParts

文章目录 语法使用值域值大于范围值小于范围时区 举例 语法 {$dateFromParts : {year: <year>, month: <month>, day: <day>,hour: <hour>, minute: <minute>, second: <second>,millisecond: <ms>, timezone: <tzExpression>…

100%开源大模型OLMo:代码/权重/数据集/训练全过程公开,重定义AI共享

前言 近日&#xff0c;艾伦人工智能研究所联合多个顶尖学术机构发布了史上首个100%开源的大模型“OLMo”&#xff0c;这一举措被认为是AI开源社区的一大里程碑。OLMo不仅公开了模型权重&#xff0c;还包括了完整的训练代码、数据集和训练过程&#xff0c;为后续的开源工作设立…

三星成功研发出业界首款12层堆叠HBM3E

三星电子有限公司成功研发出业界首款12层堆叠HBM3E DRAM——HBM3E 12H&#xff0c;这是迄今为止容量最大的HBM产品。这款新型HBM3E 12H内存模块提供了高达1,280GB/s的史上最高带宽&#xff0c;并拥有36GB的存储容量&#xff0c;相较于之前的8层堆叠HBM3 8H&#xff0c;在带宽和…

运维随录实战(1)

docker安装mongo 1,新建数据卷目录 mkdir -p /my/own/datadir 2,拉取镜像 docker pull mongo:latest 3,运行 docker run -d -p 27017:27017 -v /my/own/datadir:/data/db --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo …

ECMAScript6

课程链接 目录 相关介绍什么是ECMA什么是ECMAScript为什么学习ES6 letconst变量解构赋值模板字符串对象简化写法箭头函数函数参数的默认值rest参数扩展运算符Symbol迭代器生成器函数与调用Promise介绍与基本用法Promise封装读取文件Promise.prototype...then方法Promise.catch…

CCDP.01.寄主机SSH连接虚拟机的QA

V0.0 初始版本-2024.2.29 检查VM的网卡配置 如上图&#xff0c;如果enp0s3网卡没有出现形如10.0.0.??/24的ip配置&#xff0c;说明该网卡配置存在错误&#xff0c;或者没有“使能”该网卡。在RockyLinux8.X中可检查“ifcfg-enp0s&#xff1f;” vi /etc/sysconfig/network-…

智能系统引领的未来时代

智能系统引领的未来时代 随着人工智能技术的不断发展和普及&#xff0c;智能系统已经成为引领未来时代的关键力量。智能系统能够模拟人类的智能行为&#xff0c;实现自主学习、自主决策&#xff0c;并在各个领域展现出强大的应用潜力。在未来时代&#xff0c;智能系统将在各个…

【Python 图像处理 PIL 系列 13.1 -- 从列表中读取图像数据并生成图像】

文章目录 从列表中读取图像数据并生成图像代码示例 从列表中读取图像数据并生成图像 在Python中&#xff0c;可以使用Pillow库来创建和保存图像。这里我们将展示如何从列表list_num中读取RGB颜色数据&#xff0c;并根据row_num和column_num生成RGB格式的图像。 安装Pillow库&…

【JS】WebSocket实现简易聊天室

【JS】WebSocket实现简易聊天室 聊天室思路示例 聊天室思路 聊天室思路 1、连接服务器先建立连接&#xff0c;默认生成匿名用户(admin01) 2、客户端发送消息&#xff0c;其它客户端用户都会同步接收消息(服务端接受消息广播所有连接用户) 3、客户端修改昵称&#xff0c;其它客…

数据结构之七大排序

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…