1.3.6. Optimizador de Código

 

  • Optimización
    • Objetivo – Obtener código que se ejecuta más eficientemente según los criterios • Tiempo de ejecución (optimización temporal) • Espacio de memoria utilizado (optimización espacial).
    • Funcionamiento – Revisa el código generado a varios niveles de abstracción y realiza las optimizaciones aplicables al nivel de abstracción.
    •  Representaciones de código intermedio de más a menos abstractas
      • – Árbol sintáctico abstracto: optimizar subexpresiones redundantes, reducción de frecuencia, etc.
      • – Tuplas o cuadruplas: optimizar en uso de los registros o de las variables temporales.
      • –Ensamblador/Código máquina: convertir saltos a saltos cortos, reordenar instrucciones.
  • Condiciones que se han de cumplir
    • – El código optimizado se ha de comportar igual que el código de partida excepto por ser más rápido o ocupar menos espacio.
    • – Hay que buscar transformaciones que no modifiquen el comportamiento del código según el comportamiento definido para el lenguaje de programación. Ejemplo:
      • Si no se ha definido el orden de evaluación de los operandos la siguiente optimización es válida

                                                                                B=2*A+(A=c*d);

                                                                                 Pasar a A=c*d;

                                                                                        B=A*3;