nn_slow和nn_fast
#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的更多相关文章
随机推荐
- kali linux 系列教程之metasploit 连接postgresql可能遇见的问题
kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂 目录 kali linux 下metasploit 连接postgresql可能遇见的问题. ...
- JavaScript this 总结(含 ES6)
本文主要总结自<JavaScript 语言精粹>.部分总结自<JavaScript 高级程序设计>以及自己的经验 四种调用模式 在 JavaScript 中,this 的值取决 ...
- paip.提升效率--数据绑定到table原理和流程Angular js jquery实现
paip.提升效率--数据绑定到table原理和流程Angular js jquery实现 html #--keyword 1 #---原理和流程 1 #----jq实现的代码 1 #-----An ...
- VS2013编译经常卡在正在从以下位置加载xxx.dll的符号
换了系统后,重新下载了一个vs2013 with update2安装,编译的时候总是卡在 正在从以下位置加载xxx.dll的符号 如图: 解决方法: 进入VS---工具---选项----调试----符 ...
- 如何保证access_token长期有效
为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相 ...
- 在jsp中重复定义了两个相同id的标签导致的错误
jQuery做前台开发的程序有一个页面在IE11和谷歌浏览器下都没有问题,但是在XP的IE8下运行就报错: 后来发现是定义了两个相同id的标签所致. 在icCard.jsp中定义的标签: 在carIn ...
- 通过weburl 启动windows程序
1. 注册表修改 建立一个reg文件 执行导入 以RunLocal协议为例子 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\RunL ...
- SmartThings物联网平台简介
SmartThings是一个智能设备控制系统,它包括:SmartThings Cloud(云平台).SmartThings Hub(网关).SmartThings Mobile(手机客户端)以及各种关 ...
- EasyN IP Camera
Android App: "EasyN P" How to access EasyN HD ip camera web interface by browser: http:// ...
- android 页面跳转,数据回传
package com.example.firstpg.firstpg; import android.support.v7.app.ActionBarActivity; import android ...