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; 
 | 
|   |