Ventajas
El mayor peso en los bucles pequeños se localiza en las instrucciones que incrementan el puntero o índice al siguiente elemento del array y en los test de “¿ha finalizado el bucle?”. Si un compilador optimizador puede pre-calcular los desplazamientos de cada variable individualmente referenciada en el array, estas pueden ser expresadas instrucciones en lenguaje máquinadirectamente, por lo que no se requieren cálculos en tiempo de ejecución.
- Puede conseguirse una mejora significativa si la reducción de instrucciones a ejecutar compensa por cualquier pérdida de rendimiento causada por el incremento en el tamaño del programa.
- La predicción de saltos se minimiza.
- Si las instrucciones del bucle son independientes entre sí (es decir: si las instrucciones de un ciclo del bucle no afectan a las instrucciones del ciclo siguiente), éstas pueden ser ejecutadas en paralelo.
- El desenroscado puede realizarse dinámicamente si el número de elementos del array no se conoce en tiempo de compilación (como en el Dispositivo de Duff).
Los compiladores optimizadores pueden desenroscar bucles automáticamente o bajo demanda.
Desventajas
- El tamaño del programa aumenta, este efecto puede no ser deseado, particularmente en aplicaciones embebidas.
- Puede que también cause un incremento en los fallos de caché de instrucción, que afectan negativamente al rendimiento.
- A menos que la transformación sea aplicada de manera transparente por un compilador optimizador, el código resultante es menos legible.
- Si en el cuerpo del bucle se realizan llamadas a función, puede que no sea posible combinar el desenroscado con inlining, ya que el incremento del tamaño el código podría ser excesivo. Por lo tanto, puede que se deba escoger entre ambas optimizaciones.
- Posible aumento del uso de los registros en una sola iteración para almacenar variables temporales[cita requerida], lo que puede reducir el rendimiento, aunque dependerá mucho de posibles optimizaciones.
- Con la excepción de códigos muy pequeños y simples, los bucles desenroscados que contienen ramificaciones son más lentos que usar recursión.