美文网首页
likely()和unlikely()的用法

likely()和unlikely()的用法

作者: 潘雪雯 | 来源:发表于2021-03-03 17:58 被阅读0次

dpdk中对likely()和unlikely()的定义

#ifndef likely
#define likely(x)   __builtin_expect(!!(x), 1)//表示x的值为真的可能性更大
#endif /* likely */
#ifndef unlikely
#define unlikely(x) __builtin_expect(!!(x), 0) //表示x的值为假的可能性更大
#endif /* unlikely */

__builtin_expect()是GCC提供给程序员使用的,目的是将"分支转移"的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。
__builtin_expect(!!(x), 1)表示x的值为1的可能性更大
__builtin_expect(!!(x), 0)表示x的值为0的可能性更大

举例:
下面的代码中gcc编译的指令会预先读取y=-1这条指令,适合x的值大于0的概率比较小的情况。如果x的值大部分情况下是大于0的,就应该用likely(x>0),这样编译出的指令是预先读取y=1这条指令,这样系统在运行时会减少重新取指。

int x = -1, y;
    if(unlikely(x > 0))
        y = 1; 
    else 
        y = -1;

2,ip地址在计算机中的存储形式为uint32_t:
10.107.39.24 --> 0x0a6b2718
inet_aton()函数将一个字符串IP地址"点地址(127.0.0.1)" 转换为该地址数值的整数(一个32位的网络序列IP地址)。如果这个函数成功,函数的返回值非零,如果输入地址不正确则会返回零。使用这个函数并没有错误码存放在errno中,所以它的值会被忽略。

参考

相关文章

网友评论

      本文标题:likely()和unlikely()的用法

      本文链接:https://www.haomeiwen.com/subject/nzrqqltx.html