- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
likely与unlikely函数的意义,likelyunlikely,likely和unlikely,unlikely函数,likely函数,概率密度函数的意义,自相关函数的意义,波函数的物理意义,格林函数的物理意义,函数的意义
关于likely()与unlikely函数
分类: 嵌入式 Linux内核 2011-11-29 19:55 378人阅读 评论(0) 收藏 举报 优化编译器gcc
?支声明对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现,或者该条件很少出现的时候,编译器可以根据这条指令对条件分支选择进行优化。内核把这条指令封装成了宏,比如likely()和unlikely(),这样使用起来比较方便。if (foo) {? ? /* .. */}如果想要把这个选择标记成绝少发生的分支:/* 我们认为foo绝大多数时间都会为0.. */if (unlikely(foo)) {? ? /* .. */}相反,如果我们想把一个分支标记为通常为真的选择:/* 我们认为foo通常都不会为0 */if??(likely(foo)) {? ?? ?/* .. */}
likely()与unlikely()函数的意义 2013-03-03 15:32:42
分类: 嵌入式
看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是版本,2.6的版本应该都有)中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)__builtin_expect是gcc(版本=2.96,网上写的,我没验证过)中提供的一个预处理命令(这个名词也是网上写的,我想叫函数更好些),有利于代码优化。gcc(version 4.4.0)具体定义如下:long __builtin_expect (long exp, long c) [Built-in Function]注解为:You may use __builtin_expect to provide the compiler with branch prediction information. In general, you should prefer to use actual profile feedback for this (‘-fprofile-arcs’), as programmers are notoriously bad at predicting how their programs actually perform. However, there are applications in which this data is hard to collect.The return value is the value of exp, which should be an integral expression. The semantics of the built-in are that it is expected that exp == c.它的意思是:我们可以使用这个函数人为告诉编绎器一些分支预测信息“exp==c” 是“很可能发生的”。#define likely(x) __builtin_expect(!!(x), 1)也就是说明x==1是“经常发生的”或是“很可能发生的”。使用likely ,执行if后面语句的可能性大些,编译器将if{}是的内容编译到前面, 使用unlikely ,执行else后面语句的可能性大些,编译器将else{}里的内容编译到前面。这样有利于cpu预取,提高预取指令的正确率,因而可提高效率。举个例子(内核版本):/kernel/shed.c中有一段:if (likely(!active_balance)) {/* We were unbalanced, so reset the balancing interval */sd-balance_interval = sd-min_interval;} else {/** If weve begun active balancing, start to back off. This* case may not be covered by the all_pinned logic if there* is only 1 task on the busy runqueue (because we dont call* move_tasks).*/if (sd-balance_inter
您可能关注的文档
- C语言程序设计题目及解答07.doc
- C语言模拟试卷.doc
- d08回归分析2.xls
- C语言课程设计fan.doc
- C语言程序设计练习五(参考答案).doc
- d08回归分析21.xls
- Definition 材料的定义.doc
- DEH的转速负荷控制原理小结.doc
- DISC个人行为风格测评及职场人员管理应用技术分享.doc
- DGJ32/J_192007_建筑节能工程施工质量验收规程.doc
- 场地脚手架工程施工方案(3篇).docx
- 2024年浙江省丽水市松阳县玉岩镇招聘社区工作者真题及参考答案详解一套.docx
- 2024年河南省郑州市惠济区古荥镇招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省杭州市淳安县文昌镇招聘社区工作者真题及完整答案详解1套.docx
- 2024年浙江省台州市三门县小雄镇招聘社区工作者真题带答案详解.docx
- 2024年浙江省宁波市余姚市河姆渡镇招聘社区工作者真题及完整答案详解1套.docx
- 2024年浙江省丽水市景宁畲族自治县雁溪乡招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省杭州市临安市板桥乡招聘社区工作者真题及答案详解一套.docx
- 2024年湖北省宜昌市点军区土城乡招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省台州市路桥区桐屿街道招聘社区工作者真题附答案详解.docx
最近下载
- 鲁教版初中八年级的上册英语短语句型.docx VIP
- 新人教版高中数学选择性必修第一册全套PPT课件及配套讲义.pptx VIP
- 四川省拟任县处级试题 四川省拟任县处级党政领导干部任职资格考试题.doc VIP
- 鲁教版八年级上册英语短语句型.doc VIP
- 最新人教版(2023年新版)信息技术四年级上册(含课后反思).pdf VIP
- 2025年广东省广州市高二下学期期末考试物理(理)试卷Word版含答案 .pdf VIP
- 简单的个人简历模板.pdf VIP
- 上消化道穿孔教学查房.pptx VIP
- 科研方法论知到智慧树期末考试答案题库2025年南开大学.docx VIP
- 2023山西临汾市永和县招用公益性岗位人员50人笔试备考题库及答案解析.docx VIP
文档评论(0)