コンテンツにスキップ

Duff's device

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Duff's DeviceC

Cswitch-caseC198311

[]


調888

C

[]



do {                          /* count > 0 と仮定 */
  *to = *from++;              /* ''to'' はインクリメントされていない */
} while (--count > 0);

to 

switch do
send(to, from, count)
register short *to, *from;
register count;
{
	register 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);
	}
}

Duff's device 8

[]


使Duff's Device C2CC

(一)CswitchDuff's device CCcasebreak

(二)C

 count 

[]


switchCC case  [1]

switch/case 調8 switch/case  17調

212XFree86 Duff's device 4.0[2]使

[]


1 to
*to++ = *from++;

 The C++ Programming Language C (memcpy) [3][4]

脚注[編集]

  1. ^ Duff's device from FOLDOC
  2. ^ Ted Tso on XFree86 and performance, Linux Kernel Archive ML
  3. ^ Wall, Mike (2002年3月19日). “Using Block Prefetch for Optimized Memory Performance”. mit.edu. 2012年9月22日閲覧。
  4. ^ Fog, Agner (2012年2月29日). “Optimizing subroutines in assembly language”. Copenhagen University College of Engineering. pp. 100 ff. 2012年9月22日閲覧。

関連書籍[編集]

外部リンク[編集]