达夫设备设备是一段非常巧妙,看起来非常诡异的c代码,它可以很大的提高程序执行的效率(本文将试验),达夫设备的来源我就不说了,我们来分析一下。

  达夫设备是考虑到我们一般用for或者while循环的时候,如果执行循环内容本身用不了多少时间,那么时间将被主要消耗在每次循环的比较语句上边。

  事实上比较语句是有很大优化空间的,假设你要循环1000次,结果你从第一次开始就不断的比较是否达到上界,这是很徒劳的。

  达夫这个哥们利用了switch语句的跌落行为设计了达夫设备。

  我们用达夫设备计算一个累加运算,累加很多次,并且与传统while循环进行时间比较。

测试主函数

  

达夫设备:

  执行时间:

它的执行时间是0.496s。  这里需要注意,x的定义是要用register关键字,这样cpu就会把x尽可能存入cpu内部的寄存器,但是不是百分之百会存进寄存器,因为计算机通用寄存器就那么一二十个(现在64新的cpu我也不知道有多少个,但是肯定很少),所以cpu也只是尽可能的给你把x放进寄存器而已。

现在我们看一下传统的循环的执行时间:

测试函数:

传统方法:

结果:

结果达夫设备设备确实缩短了不少时间。。

当然了,达夫设备还可以用for语句

最新文章

  1. hdu1160 LIS变形
  2. NuGet更新引用Dll
  3. yii 获取当前ip 常用的调用变量
  4. BZOJ 4631 踩气球
  5. hdu 5029 Relief grain(树链剖分+线段树)
  6. Oracle 列顺序测试
  7. [BZOJ 1082] [SCOI2005] 栅栏 【二分 + DFS验证(有效剪枝)】
  8. 写一个Windows上的守护进程(1)开篇
  9. [LeetCode]题解(python):020-Valid Parentheses
  10. centos6安装bt工具transmission
  11. Python多层目录模块调用
  12. Ubuntu16.04+Apache虚拟主机配置详解
  13. JAVA_SE基础——55.自定义异常类
  14. python 写日志
  15. linux shell中break和continue跳出循环
  16. split根据一个元素分割语句
  17. luogu 1631 序列合并
  18. ps -aux与ps -ef
  19. iOS开发-Instruments性能调优
  20. aarch64_l3

热门文章

  1. TDD在Unity3D游戏项目开发中的实践
  2. ASP.NET路由模型解析
  3. TODO:Laravel增加验证码
  4. Gradle 实现 Android 多渠道定制化打包
  5. Mac OS 使用 Vagrant 管理虚拟机(VirtualBox)
  6. Servlet监听器笔记总结
  7. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
  8. 搭建属于自己的VIP积分系统(1)
  9. BPM体系文件管理解决方案分享
  10. JDK安装与配置