Dispositivo de Duff

En el ámbito de las ciencias de la computación un dispositivo de Duff es una implementación optimizada de una copia secuencial para programas en lenguaje C que utiliza una técnica normalmente empleada en lenguaje ensamblador para desenrollar bucles.

Su descubrimiento se atribuye a Tom Duff que en noviembre de 1983 publicó[1]​ un mensaje en USENET describiendo este hallazgo.

Normalmente una copia secuencial se podría escribir de la siguiente forma:[2]​ Mientras intentaba optimizar este bucle, Tom Duff se dio cuenta de que la versión desdoblada del mismo podía ser reescrita intercalando las estructuras de las instrucciones switch y loop.

La optimización se produce debido a que sólo se realiza una comparación y decremento cada 8 elementos copiados en lugar de por cada uno.

Si bien la técnica de desenrollado de bucles era conocida con anterioridad, esta forma de escribirla resultó una novedad y aunque extraña y poco intuitiva se trata de una construcción perfectamente válida en C, y muchos compiladores generan instrucciones de máquina tal cual un programador en lenguaje ensamblador lo hubiera hecho a mano.