Duff's device
来源:互联网 发布:百度软件开发平台 编辑:程序博客网 时间:2024/04/30 15:10
Tom Duff 在1983年提出了著名的Duff's device。在将内存数据copy到IO或其他设备时,此法被认为是最快的C语言方法。
传统的方法:
send(to, from, count)register short *to, *from;
register count;
{
do
*to = *from++;
while(--count>0);
}
不对此段代码做精确的汇编分析,但有理由认为任何一种编译器在每一次循环中都会需要至少一次的条件检查、计数加一以及
一次跳转。
如果进行改进,使每次循环中的copy操作数增加,循环数减少,总次数不变,可以很显然的提高速度,这是因为减少了条件
检查、计数加一和跳转次数。但这时要考虑复制总数和循环次数的整除关系,因此代码很ugly。
Duff's device:
send(to, from, count)
register short *to, *from;
register count;
{
register n=(count+7)/8;
switch(count%8){
case 0:do{*to = *from++;
case 7:*to = *from++;
case 6:*to = *from++;
case 5:*to = *from++;
case 4:*to = *from++;
case 3:*to = *from++;
case 2:*to = *from++;
case 1:*to = *from++;
}while(--n>0);
}
}
一目了然!
http://www.codemaestro.com/reviews/5
http://www.lysator.liu.se/c/duffs-device.html#duffs-device
- Duff's Device
- Duff's device
- Duff's device
- Duff's Device
- Duff's device
- Duff's Device
- Duff's device
- Duff's Device
- Duff's Device
- Duff's device
- Duff's Device (达夫设备)
- Duff's device神奇的switch
- Duff's Device (达夫设备)
- Duff's device(C循环展开)
- 达夫设备(Duff's Device)
- 达夫设备Duff's Device
- 达夫设备(Duff's Device)
- 达夫设备--Duff's Device
- tomcat配置虚拟路径的4种方法
- 学习笔记(1)
- struts里应用Ajax
- 《亮剑.NET:.NET深入体验与实战精要》前言
- 伊朗选举“兴奋”奥巴马
- Duff's device
- web services 调用
- 福布斯:微软浏览器捆绑大战仍将持续
- 考试
- 解决DNN安装时不执行SQL的问题
- 小玩意:切换SVN代码库地址的脚本
- 六十星系之54廉贞破军坐卯酉
- Hibernate学习笔记-HQL(Hibernate Query Language)
- ASP.NET常见问题