下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页C语言中likely和unlikely的使用
在(单片机)/(嵌入式)(编程)中,对速度要求比较高,likely和unlikely就是一个比较好的技巧,适用于有if-else分支,且知道哪个发生概率大的情况。
1.likely和unlikely
这是两个宏,当有if-else分支时,告诉编译器,哪个条件更加有可能发生。对if-else分支结构进行优化。likely代表if分支大概率会发生,unlikely代表if分支大概率不会发生。
#definelikely(x)__buil(ti)n_expect(!!(x),1)#defineunlikely(x)__builtin_expect(!!(x),0)__builtin_expect是编译器内建函数,原型为long__builtin_expect(longexp,longc)。
题外话:!!是(C语言)中处理逻辑表达式的一个技巧。因为C语言中没有布尔变量,所以布尔值是用整形来代替的,0为假,非0为真。当x为0时,!(x)为1,!!(x)为0,!!的运算没有什么意义;但当x为非0时(比如100),!(x)为0,!!(x)为1,这样就达到了将非0值(比如100)全部都映射为1的效果。
例子:
假如有这样一个函数:
intfun(inta){if(a>100)}在实际的运行情况中,a>100不太可能发生。那就这样写:
intfun(inta){if(unlikely(a>100))}同理,如果实际情况是a>100的情况更多,就用likely。
2.注意
1.likely和unlikely使用判断必须准确,写反会使运行速度变慢。
2.编译时优化一般需要至少使用-O2选项,否则优化不起作用。
3.能否使用与编译器有关,gcc可以,clang好像也可以,msvc好像不可以。
3.原理
编译器在编译生成(汇编)代码时会在编译选项的引导下调整if分支内代码的位置,如果是likely修饰过的就调整到前面,如果是unlikely修饰过的就调整到后面。放到前面的代码可以节省跳转指令带来的时间开销,从而达到提升效率的目的。
现在的(CPU)都有(IC)(ac)he和流水线机制。在运行当前这条指令时,ICache会预取后面的指令,以提升运行效率。但是如果条件分支不满足,也就会跳转到了其他指令,那预取的指令也就没有用了,这样就降低了流水线的效率。
如果使用likely和unlikely来告诉编译器,哪个更加有可能发生,编译器将大概率执行的代码放在靠前的位置,就可以大大提高指令预取值的命中率,从而
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鼻窦炎急性发作护理指南
- 老年人应急救护护理方法
- 2026年基本药物制度试题及答案
- 女性主义文学批评发展历程与性别话语重构-基于理论演进梳理与文本阐释实践分析
- 2026年国企法务岗招聘试题(含答案)
- 2026年导管护理安全试题及答案
- 护理指南:职业发展与继续教育
- 循环系统护理中的沟通技巧
- 客房部年终工作总结及下年度工作计划
- 2026年安全工程师实务试题及答案
- 2024年湖南高考政治真题及答案
- 部编高教版2023·职业模块 中职语文 2.《宁夏闽宁镇:昔日干沙滩今日金沙滩》 课件
- 【公开课】多姿与多彩(生活色彩)课件高中美术人教版+(2019)+选择性必修1+绘画
- DB1506∕T 13-2020 热力站建设技术标准
- 国家职业技术技能标准 4-02-02-09 汽车救援员 人社厅发202226号
- PDCA提高便秘患者肠镜检查肠道准备合格率
- 安徽省城市控制性详细规划编制方案
- DL∕T 2553-2022 电力接地系统土壤电阻率、接地阻抗和地表电位测量技术导则
- 《开发新能源(一)》教学设计
- 清洗空调简易合同范本
- 2021泛海三江CRT-9200消防控制室图形显示装置使用手册
评论
0/150
提交评论