• 【转载】likely和unlikely


    ZZ: http://gpg119.blog.163.com/blog/static/9153415320088176193165/

    linux中判断语句经常会看到likely和unlikely,例如:

    if(likely(value)){

    }

    else{

    }

    简单从表面上看if(likely(value)) == if(value),if(unlikely(value)) == if(value)。

    也就是likely和unlikely是一样的,但是实际上执行是不同的,加likely的意识是value的值为真的可能

    性更大一些,那么执行if的机会大,而unlikely表示value的值为假的可能性大一些,执行else机会大一些。

    加上这种修饰,编译成二进制代码时likely使得if后面的执行语句紧跟着前面的程序,unlikely使得else后

    面的语句紧跟着前面的程序,这样就会被cache预读取,增加程序的执行速度,likely和unlikely的实现在

    include/linux/compiler.h中:

          9 #if __GNUC__ == 2 && __GNUC_MINOR__ < 96
         10 #define __builtin_expect(x, expected_value) (x)
         11 #endif
         12
         13 #define likely(x)   __builtin_expect((x),1)
         14 #define unlikely(x) __builtin_expect((x),0)

    __builtin_expect是gcc的一个预处理命令,其解释如下:

    long __builtin_expect (long exp, long c)
    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
    value of c must be a compile-time constant. The semantics of the built-in are that it
    is expected that exp == c. For example:
    if (__builtin_expect (x, 0))
    foo ();
    would indicate that we do not expect to call foo, since we expect x to be zero. Since
    you are limited to integral expressions for exp, you should use constructions such as
    if (__builtin_expect (ptr != NULL, 1))
    error ();
    when testing pointer or floating-point values.

  • 相关阅读:
    TP5之自定义分页样式
    使用ajax方法实现form表单的提交
    H5页面唤起手机拨打电话(拨号)
    php开启openssl扩展
    tp5 加载 extend 类库的方法 (有命名空间和没有命名空间的调用)【转】
    PHP 返回13位时间戳
    thinkphp5 view_path 配置,进行模板分离
    html2canvas 截图不完整 图片缺失问题
    PHP把JSON转换成数组
    tp5怎么隐藏默认模块名啊
  • 原文地址:https://www.cnblogs.com/hengfeng/p/2313464.html
Copyright © 2020-2023  润新知