C语言编程领域,达夫设备(Duff's device)是一种将循环展开执行,从而提高执行效率的一种技术方法。
汤姆·达夫于1983年11月发明了这种方法,可能是迄今为止利用C语言switch语句特性所作的最巧妙的实现。
通过一个简单的例子,来理解一下什么是Duff's device.
比如,一个循环复制的函数实现(只是例子,不考虑memcpy):
void send( int * to, int * from, int count) {
for (int i = 0; i < count; i++) {
*to++ = *from++;
}
}
如果count 是10000,那么就需要循环10000次。这么多次数的循环,对CPU利用率并不高。
用Duff's device 方法改写后的代码,展示如下:
void send( int * to, int * 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 &#