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