zoukankan      html  css  js  c++  java
  • Linux likely unlikely

    /*************************************************************************
     *                        Linux likely unlikely
     * 说明:
     *     在阅读一些源代码的时候经常会遇到likely和unlikely,一直也没有去进一步
     * 跟踪其工作机制,于是今天抽点时间来验证一下。
     *
     *                                      2016-5-3 深圳 南山平山村 曾剑锋
     ************************************************************************/
    
    一、参考文档:
        1. Linux中的likely()和unlikely() 
            http://blog.chinaunix.net/uid-25409479-id-158584.html
        2. 浅析linux likely unlikely的实现细节
            http://www.bianceng.cn/OS/Linux/201605/49902.htm
    
    二、Demo:
        #include <stdio.h>
    
        #define unlikely(expr) __builtin_expect (expr, 0)
        #define likely(expr)   __builtin_expect (expr, 1)
    
        int main(int argc, char *argv) {
    
            printf("unlikely: %02x.
    ", unlikely(1!=1));
            printf("unlikely: %02x.
    ", unlikely(1==1));
    
            printf("likely: %02x.
    ", likely(1!=1));
            printf("likely: %02x.
    ", likely(1==1));
    
        }
    
    三、结果:
        myzr@myzr:~/c_program$ ./a.out
        unlikely: 00.
        unlikely: 01.
        likely: 00.
        likely: 01.
    
    四、结论:
        1. 在expr中,表达的值并不会影响likely、unlikely表达式的返回值,故其使用方法应该是相同的;
        2. 如参考文章中提到的:使用likely(),执行if后面的语句的机会更大,使用unlikely(),执行else后面的语句机会更大一些。
        3. 于是我们知道了,likely、unlikely不影响表达式的值,而是表示执行if、else中代码可能性加上了推测的可能性。
  • 相关阅读:
    OpenStack--Rabbitmq组件消息队列
    Redis-主从
    haproxy mycat mysql 读写分离MHA高可用
    mysql小白系列_14 线上故障分析与排错
    mysql小白系列_13 Online DDL
    mysql小白系列_12 sysbench
    mysql小白系列_11 MHA补充
    mysql小白系列_11 MHA
    mysql小白系列_10 mysql主从复制原理
    mysql小白系列_09 mysql性能优化关键点
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5454181.html
Copyright © 2011-2022 走看看