Duff 装置中case情况越多性能越好
猜想:Duff装置再循环里面,直接调用的方法越多(也就是case的数量比较多),性能相对越好 ???!!!
我们基于Duff装置来做进一步的测试。
然后分别添加两个新的函数,一个函数式 case有4种情况,另一个是case有 12种情况。。。
function duffDevice() {
var testVal = 0;
var n = Math.ceil(iterations / 8);
var caseTest = iterations % 8;
do {
switch (caseTest) {
case 0:
testVal++;
case 7:
testVal++;
case 6:
testVal++;
case 5:
testVal++;
case 4:
testVal++;
case 3:
testVal++;
case 2:
testVal++;
case 1:
testVal++;
}
caseTest = 0;
}
while (--n > 0);
}
duffDevice
function duffDeviceSize4() {
var testVal = 0;
var n = Math.ceil(iterations / 4);
var caseTest = iterations % 4;
do {
switch (caseTest) {
case 0:
testVal++;
case 3:
testVal++;
case 2:
testVal++;
case 1:
testVal++;
}
caseTest = 0;
}
while (--n > 0);
}
duffDeviceSize4
function duffDeviceSize12() {
var testVal = 0;
var n = Math.ceil(iterations / 12);
var caseTest = iterations % 12;
do {
switch (caseTest) {
case 0:
testVal++;
case 11:
testVal++;
case 10:
testVal++;
case 9:
testVal++;
case 8:
testVal++;
case 7:
testVal++;
case 6:
testVal++;
case 5:
testVal++;
case 4:
testVal++;
case 3:
testVal++;
case 2:
testVal++;
case 1:
testVal++;
}
caseTest = 0;
}
while (--n > 0);
}
duffDeviceSize12
测试结果如下:

以下只是我自己的结论,不一定正确,仅提供参考(不是很确定的东西,不能误人子弟):
这个结果说明了,在Duff循环中,case 情况越多,性能相对越好,但是这样代码的书写不是很方便。Duff装置提供给我的更多的只是一个思路,而不是一个死板的算法公式。
欢迎大家共同探讨。。。迎风一刀劈有礼了。。。
Duff 装置中case情况越多性能越好的更多相关文章
- Javascript Duff装置 循环展开(Javascript Loop unrolling Duff device)
Javascript 中会用到for 循环,当要循环的数据记录很多的时候,可能会对性能产生很大影响.这时我们可以考虑展开for循环,这时就要用到Duff装置(Duff Device). 先来看一个小例 ...
- Swift 中 String 取下标及性能问题
Swift 中 String 取下标及性能问题 取下标 String String 用 String.Index 取下标(subscript)得到 Character,String.Index 要从 ...
- 在VS 2015中边调试边分析性能
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 对代码进行性能分析,之前往往是一种独立的Profiling过程,现在在VS 2015中可以结 ...
- (二)shell中case语句、程序传参、while
2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...
- Linux的虚拟内存管理-如何分配和释放内存,以提高服务器在高并发情况下的性能,从而降低了系统的负载
Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...
- 精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能)
原文:精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能) 本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提 ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- python中日志logging模块的性能及多进程详解
python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...
- 【FPGA】 007 --Verilog中 case,casez,casex的区别
贴一个链接:http://www.cnblogs.com/poiu-elab/archive/2012/11/02/2751323.html Verilog中 case,casez,casex的区别 ...
随机推荐
- hdu2795线段树
//=========================================== //segment tree //final version //by kevin_samuel(fenic ...
- Linux学习笔记3-VI 和 VIM的使用
vi: Visual Interface vim: VI iMproved 全屏编辑器, Linux系统下最强大的两款编辑器,vi和vim,vi是Linux本身自带的一款编辑器,纯文本编辑不带任何效果 ...
- php 多维数组 arrayList array()
<pre name="code" class="php">$params=array( "tid"=>"3&qu ...
- HipHop算法:利用微博互动关系挖掘社交圈
/* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ CopyMiddle: 张俊林 TimeStamp:2012年3 月 在微博环境下,如何 ...
- _00023 Kafka 奇怪的操作_001它们的定义Encoder达到Class数据传输水平和决心
博文作者:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 博文标题:_00023 Kafka 诡异操作_001自己定义Encoder实现Class级别的数据传送 ...
- HTTP协议探析
1.HTTP协议概述 超文本传输协议(HTTP)是一种为分布式,协作式的,超媒体信息系统.它是一种通用的,无状态(stateless)的协议,除了应用于超文本传输外,它也可以应用于诸如名称服务器和分布 ...
- iOS多态 动态绑定
多态和动态绑定是为了解决父类调用子类的问题 首先,声明三个类aa bb cc 都继承于fist类 #import <Foundation/Foundation.h> @interface ...
- Cookies与保持登录(新浪微博的简单模拟登录)
Cookies与保持登录(新浪微博的简单登录) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino ...
- 考察printf函数返回值
最近偶然间见了这样一道题: #include<stdio.h> int main() { ; printf("%d\n",printf("%d", ...
- Qt编译时MinGW去掉对gcc动态库的依赖(去掉对libgcc_s_dw2-1.dll,libstdc++-6.dll的依赖)
用Qt写点东西,我一般是下载官方的MinGW编译工具包,它有个不好的地方,经常还会多一些除了Qt库以外的其它的依赖动态链接库,比如:libgcc_s_dw2-1.dll,libstdc++-6.dll ...