#define nn_fast(x) __builtin_expect ((x), 1)
#define nn_slow(x) __builtin_expect ((x), 0) __builtin_expect目的是提供分支信息给编译器,让编译器优化代码,减少指令的跳转带了的性能下降。
处理器里有很多处理单元,可以预加载很多指令进行并行运算,但是如果遇到跳转的指令没有加载到处理
单元中,所有的预加载指令都必须重新加载。 __builtin_expect ((x), ) 这个可以告诉编译器,x为真的情况比较多
__builtin_expect ((x), ) 这个可以告诉编译器,x为假的情况比较多 if (__builtin_expect ((x), )) {
code1...
}
else {
code2....
}
x为真的情况多,编译器编译的时候优化代码,使得执行时,预先加载code1的代码的指令 __builtin_expect ((x), )同理,预先加载code2的代码指令。 __builtin_expect不影响到x的值,x为真,__builtin_expect返回的值也为真
if(nn_fast(x)) == if (x)
if(nn_slow(x)) == if (x)

nn_slow和nn_fast的更多相关文章

随机推荐

  1. kali linux 系列教程之metasploit 连接postgresql可能遇见的问题

    kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂   目录 kali linux 下metasploit 连接postgresql可能遇见的问题. ...

  2. JavaScript this 总结(含 ES6)

    本文主要总结自<JavaScript 语言精粹>.部分总结自<JavaScript 高级程序设计>以及自己的经验 四种调用模式 在 JavaScript 中,this 的值取决 ...

  3. paip.提升效率--数据绑定到table原理和流程Angular js jquery实现

    paip.提升效率--数据绑定到table原理和流程Angular js  jquery实现 html #--keyword 1 #---原理和流程 1 #----jq实现的代码 1 #-----An ...

  4. VS2013编译经常卡在正在从以下位置加载xxx.dll的符号

    换了系统后,重新下载了一个vs2013 with update2安装,编译的时候总是卡在 正在从以下位置加载xxx.dll的符号 如图: 解决方法: 进入VS---工具---选项----调试----符 ...

  5. 如何保证access_token长期有效

    为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相 ...

  6. 在jsp中重复定义了两个相同id的标签导致的错误

    jQuery做前台开发的程序有一个页面在IE11和谷歌浏览器下都没有问题,但是在XP的IE8下运行就报错: 后来发现是定义了两个相同id的标签所致. 在icCard.jsp中定义的标签: 在carIn ...

  7. 通过weburl 启动windows程序

    1. 注册表修改 建立一个reg文件 执行导入  以RunLocal协议为例子 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\RunL ...

  8. SmartThings物联网平台简介

    SmartThings是一个智能设备控制系统,它包括:SmartThings Cloud(云平台).SmartThings Hub(网关).SmartThings Mobile(手机客户端)以及各种关 ...

  9. EasyN IP Camera

    Android App:  "EasyN P" How to access EasyN HD ip camera web interface by browser: http:// ...

  10. android 页面跳转,数据回传

    package com.example.firstpg.firstpg; import android.support.v7.app.ActionBarActivity; import android ...