当前位置:  技术问答>linux和unix

Linux代码中的unlikely和likely分别是什么意思?

    来源: 互联网  发布时间:2016-02-26

    本文导语:  Linux代码中的unlikely和likely分别是什么意思? 我在Linux代码中没有找unlikely和likely的定义. 在源代码中搜索出来很多无法找. 请各位赐教! 谢谢! | 内核里有很多线程的代码啊 其实就是告诉编译器哪...

Linux代码中的unlikely和likely分别是什么意思?
我在Linux代码中没有找unlikely和likely的定义.
在源代码中搜索出来很多无法找.
请各位赐教!
谢谢!

|
内核里有很多线程的代码啊
其实就是告诉编译器哪个分支在实际运行时更可能运行以便产生分支预测相关的机器指令。
用likely 标记那些极有可能运行的分支,而用unlikely标记很少运行的分支来实现优化

|
是GCC对C的扩展,unlikely和likely分别表示一个表达式不太可能为真或很可能为真,这样编译器能够更好的优化指令预取,提高运行效率。
例如在写类似断言或检查错误状态的时候经常使用,因为一般情况下错误总是不大可能发生的。

|
下面节自《Linux Kernel Development》 2nd , 第二章
(书可以在http://elinux.cn下载)

Branch Annotation
The gcc C compiler has a built-in directive that optimizes conditional branches as either very likely taken or very unlikely taken. The compiler uses the directive to appropriately optimize the branch. The kernel wraps the directive in very easy-to-use macros, likely() and unlikely().

For example, consider an if statement such as the following:

if (foo) {
        /* ... */
}



To mark this branch as very unlikely taken (that is, likely not taken):

/* we predict foo is nearly always zero ... */
if (unlikely(foo)) {
        /* ... */
}



Conversely, to mark a branch as very likely taken:

/* we predict foo is nearly always nonzero ... */
if (likely(foo)) {
        /* ... */
}



You should only use these directives when the branch direction is overwhelmingly a known priori or when you want to optimize a specific case at the cost of the other case. This is an important point: These directives result in a performance boost when the branch is correctly predicted, but a performance loss when the branch is mispredicted. A very common usage for unlikely() and likely() is error conditions. As one might expect, unlikely() finds much more use in the kernel because if statements tend to indicate a special case.


|
指令优化的东西
控制CPU的指令预取


|
ls正解,内核的模块很多都是这样的,比如内核地址空间地址fixup,
.section .fixup
.previous

不大可能出现的代码被编译器安排到远的地方,这样可以充分利用CPU的流水线技术。

    
 
 

您可能感兴趣的文章:

  • linux内核中的likely宏和unlikely宏介绍及用法
  • LINUX AS,as是什么意思?
  • sed linux 这句话什么 意思?
  • Linux版本中,generic是什么意思?
  • linux下的命令“exec <&- 2>&-”代表什么意思?
  • linux9.0 linux8.0 后面的9.0 8.0是什么意思?
  • 什么意思,看不懂linux的代码
  • linux中两个##是什么意思吖。。。
  • linux下文件夹带"."表示什么意思,比如/etc/pam.d这个文件夹?
  • Linux 文件权限中t是什么意思?
  • 再linux 7.0的vi中ctrl+s是什么意思?怎么解琐?
  • 不好意思,问一下LINUX下建立文件夹的命令是什么?THANKS!!!
  • 请问 linux 中的有个符号 # 代表什么意思?
  • linux中ifeq里面$的意思是什么?
  • 请问linux里的 # 和 $ 都有什么意思啊?
  • 在linux中 2>&1 是什么意思?谢谢啦!
  • 请问一个菜鸟问题 linux命令中-lc得意思
  • linux下命令./是什么意思
  • 请问在这段linux脚本里面的ccpbs是什么意思?
  • linux ~/.dir_colors 中的 ~ 表示什么意思?
  • linux下的文件上面的标志代表什么意思?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 读懂 Linux 内核代码不难,难的是读懂 Linux 内核代码背后的哲学!
  • Linux c++库boost unordered_set数据插入及查找代码举例
  • 为什么比较freebsd和linux的源代码,觉得linux的代码十分的庞大。。
  • Linux c++库boost unordered_map数据插入及查找代码举例
  • linux源代码的时间函数源代码
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • RedHat Linux是开放源代码的吗?如何能看见它的源代码,如何进行修改?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • windows下写的代码 gb2312 如何转成 LINUX和WINDOWS都可正常显示的代码
  • Linux 共享内存介绍及实现代码
  • Linux源代码中ata驱动为什么要调用pci驱动的代码
  • SSL握手通信详解及linux下c/c++ SSL Socket代码举例
  • 高分请教!Netscape浏览器的源代码公开了吗?从那里可以得到For linux的源代码?
  • 谁能告诉我早期LINUX内核的源代码和C编译器的源代码,哪能找到!谢谢!要多少分都给!
  • 谁有最早版本的LINUX源代码?能发给我一份吗?高分求救啊……我真的很需要最早的一些版本的源代码的!
  • 高深问题:有了linux内核源代码如何做成一个linux操作系统
  • 哪本linux源码分析的书里详细讲解了Linux的核心启动代码
  • 我们知道内核源代码文件都放在/linux下,但目录/linux的绝对路径是啥?谢谢!
  • 我现在正读Linux源代码,请问下面代码是什么意思?
  • 想使用Kliyx把Delphi写的代码编译为Linux程序, 装什么Linux什么版本最好?请明人指教,谢谢!?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 编程技术其它 iis7站长之家
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3