以上是有效的C代码吗?如果是这样,它想达到什么目的?为什么有人会做上述事情? [重复]

问题描述

|                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

是的,它被称为达夫的设备。     ,是的,它是有效的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的设备如何工作? 对不起我的英语不好     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...