Что такое Duff's device и зачем он нужен?

Что такое Duff's device и зачем он нужен?

Видел такой код на википедии, но так и не понял, в чём смысл. Объясните, пожалуйста.

send(to, from, count)
register short *to, *from;
register count;
{
    register n = (count + 7) / 8;  // gives the number of iterations
    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);
    }
}

Ответы (1 шт):

Автор решения: joker

Из Википедии:

Это оптимизированная реализация последовательного копирования, использующая ту же технику, что применяется для размотки циклов.

Традиционный способ последовательного копирования (до открытия Даффа) выглядел так:

do { /* Предполагается count > 0 */
    *to = *from++;            /* Здесь указатель to не увеличивается */
} while (--count > 0);

В этом примере to не увеличивается потому, что Дафф копировал в единственный регистр ввода-вывода, отображаемый в память. В современном языке Си определение переменной to должно быть подкреплено с помощью ключевого слова volatile.

Во время оптимизации этого кода Дафф осознал, что «раскрученный» вариант цикла может быть реализован при помощи наложения конструкций switch и do/while.

strcpy(to, from, count)
register char *to, *from;
register count;
{
    register n = (count + 7) / 8;
    if (!count) return;
    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);
    }
}
→ Ссылка