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