问题描述
|
这个问题已经在这里有了答案:
解决方法
是的,它被称为达夫的设备。
,是的,它是有效的C代码。这是一种聪明的优化方法,用于将正确数量的字节(按计数)从一个指针(从)复制到另一指针(到)。 switch语句在情况下使用直通,因此
case 7:
将复制一个字节,然后直通到case 6:
。最终,所有内容都落入正确数量的复制指令,从而导致复制了正确数量的字节。这样可以在大多数机器上紧密打包所生成的汇编指令,并且通常可以提高性能。
您可以在此处阅读有关duff设备的更多信息。
,该代码是正确的,它被称为Duff设备。
我认为了解此代码的最佳方式是
为了了解switch的工作,为此,我建议使用以下代码:
将\“ case x:\”视为简单标签
void duff(register char *to,register char *from,register int count)
{
register int n=(count+7)/8;
// replace switch with this lines
if (count % 8 == 7) goto case 7;
if (count % 8 == 6) goto case 6;
if (count % 8 == 5) goto case 5;
if (count % 8 == 4) goto case 4;
if (count % 8 == 3) goto case 3;
if (count % 8 == 2) goto case 2;
if (count % 8 == 1) goto case 1;
if (count % 8 == 0) goto case 0;
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);
}
我建议访问此链接Duff的设备如何工作?
对不起我的英语不好