神奇的 Duff's device
C 语言编程领域,达夫设备(Duff's device)是一种将循环展开执行,从而提高执行效率的一种技术方法。
汤姆·达夫于 1983 年 11 月发明了这种方法,可能是迄今为止利用 C 语言 switch 语句特性所作的最巧妙的实现。
通过一个简单的例子,来理解一下什么是 Duff's device.
比如,一个循环复制的函数实现(只是例子,不考虑 memcpy):
如果 count 是 10000,那么就需要循环 10000 次。这么多次数的循环,对 CPU 利用率并不高。
用 Duff's device 方法改写后的代码,展示如下:
上面的代码中,使用了 C 语言的一个隐晦的能力,switch case + do while 组合,这个就是达夫设备(Duff's device)。
如果 count 为 10000,那么之前的代码需要循环 10000 次,而用 Duff' device 改写后,只需要 1250 次循环即可。
实现机理解析:
C 语言对 switch 语句的规范是比较松的,在 switch 控制语句内,条件标号(case)可以出现在任意子语句之前,充作其前缀。
此外若未加入 break 语句,则 switch 语句根据条件判定,跳转到对应的标号,并在开始执行后,控制流会一直执行到 switch 嵌套语句的末尾。
另一方面,C 语言本身也对跳转到循环内部提供了支持,因而此处的 switch/case 语句便可跳转到循环内部。
C 语言的这个能力,是不是非常神奇?
我的微信号是 实力程序员,欢迎大家转发至朋友圈,分享给更多的朋友。
版权声明: 本文为 InfoQ 作者【实力程序员】的原创文章。
原文链接:【http://xie.infoq.cn/article/0b77a0413e58d9f537e578df6】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论