嵌入式极致性能, 达夫设备「先跳后转,八次一判」

什么是达夫设备(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
© 版权声明

相关文章

暂无评论

none
暂无评论...