Bien que je ne sois pas sûr à 100% de ce que vous demandez, voici ...
Le problème que le périphérique de Duff aborde est celui du déroulement de la boucle (comme vous l'aurez sans doute vu sur le lien Wiki que vous avez publié). Cela équivaut essentiellement à une optimisation de l'efficacité d'exécution, par rapport à l'empreinte mémoire. L'appareil de Duff traite de la copie en série, plutôt que de n'importe quel problème ancien, mais est un exemple classique de la façon dont les optimisations peuvent être effectuées en réduisant le nombre de fois qu'une comparaison doit être effectuée en boucle.
Comme exemple alternatif, qui peut faciliter la compréhension, imaginez que vous avez un tableau d'éléments que vous souhaitez boucler, et ajoutez-leur 1 à chaque fois ... normalement, vous pouvez utiliser une boucle for, et boucler environ 100 fois . Cela semble assez logique et, c'est ... cependant, une optimisation peut être faite en déroulant la boucle (évidemment pas trop loin ... ou vous pouvez tout aussi bien ne pas utiliser la boucle).
Donc une boucle for régulière:
for(int i = 0; i < 100; i++)
{
myArray[i] += 1;
}
devient
for(int i = 0; i < 100; i+10)
{
myArray[i] += 1;
myArray[i+1] += 1;
myArray[i+2] += 1;
myArray[i+3] += 1;
myArray[i+4] += 1;
myArray[i+5] += 1;
myArray[i+6] += 1;
myArray[i+7] += 1;
myArray[i+8] += 1;
myArray[i+9] += 1;
}
Ce que fait l'appareil de Duff, c'est implémenter cette idée, en C, mais (comme vous l'avez vu sur le Wiki) avec des copies en série. Ce que vous voyez ci-dessus, avec l'exemple déroulé, ce sont 10 comparaisons contre 100 dans l'original - cela équivaut à une optimisation mineure, mais peut-être significative.