什么是达夫设备(Duff‘s Device)?
达夫设备(Duff‘s Device), 这是一个非常著名的C语言编程技巧,用于循环展开,以优化复制或处理数组等操作的执行效率。它因发现者Tom Duff而得名,其独特之处在于巧妙地利用了C语言中switch语句和do…while循环可以嵌套的特性。「先跳后转,八次一判」(先通过 switch 跳转,然后每 8 次操作才判断一次循环条件)。
核心思想
在需要进行大量迭代的循环中,每次循环的判断和跳转指令会有一定开销。循环展开通过减少迭代次数来降低这种开销。例如,将循环体重复8次,那么迭代次数就减少到原来的1/8。
达夫设备的精妙之处在于,它优雅地处理了当循环次数不是展开系数的整数倍时剩下的“余数”操作。
经典代码示例
void duff_copy(char *to, char *from, int count) {
int 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);
}
}
VC工程实践
int main() {
char *from = "12212
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...





