标题: Tom Duff的C语言奇技淫巧 创建: 2021-12-30 22:00 链接: https://scz.617.cn/misc/202112302200.txt 1983年11月Tom Duff在卢卡斯影业(Lucasfilm)工作时,致力于实时动画的优化处理, 在一个特定上下文里提出一种C语言的奇技淫巧,组合利用了switch/case与do/while。 Duff's device https://en.wikipedia.org/wiki/Duff%27s_device bluerust给我推了这个。看了一下,确实很巧妙,特定上下文里的奇技淫巧,这种写 法现在仍然得到支持。 -------------------------------------------------------------------------- /* * gcc-10 -Wall -pipe -O3 -s -o test test.c */ #include #include #include void duff_memcpy ( char *to, char *from, size_t count ) { register 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++; printf( "n = %d\n", n ); } while ( --n > 0 ); } } int main( int argc, char *argv[] ) { char dst[0x80]; char src[0x80]; memset( ( void * )src, 'A', sizeof(src) ); memset( ( void * )dst, '\0', sizeof(dst) ); src[sizeof(src)-1] = '\0'; puts( src ); /* * just copy 0x7f bytes */ duff_memcpy( dst, src, sizeof(src)-1 ); puts( dst ); return 0; } -------------------------------------------------------------------------- 其思路是普适的,换个上下文仍有可能应用这种思路进行优化。不过我觉得,不管是 啥上下文,这种还是放到库函数里吧,正常人就别自己实现了。