OPTIMIZACIÓN
La optimización de código puede
realizarse durante la propia generación o como paso adicional, ya sea
intercalado entre el análisis semántico y la generación de código (se optimizan
las cuádruplas) o situado después de ésta.
En esta fase se intenta mejorar el
código, en el sentido de reducir la cantidad de recursos (tiempo y
memoria) necesarios.
Clasificación de optimizaciones:
1.
Dependientes de la máquina.
·
Asignación de registros (ver capítulo anterior).
·
Instrucciones especiales ("idioms").
·
Reordenación del código.
2.
Independientes de la máquina.
·
Ejecución en tiempo de compilación.
·
Eliminación de redundancias.
·
Cambio de orden.
·
Reducción de frecuencia de ejecución
(invariancias).
·
Reducción de fuerza.
Optimización y depuración suelen ser incompatibles. Por ejemplo, si se
elimina totalmente una instrucción, puede ser imposible poner una parada en
ella para depuración.
La finalidad de la
optimización de código es producir un código objeto lo más eficiente posible.
En algunos casos también se realiza una optimización del código intermedio.
Algunas optimizaciones que se pueden realizar son la evaluación de expresiones
constantes, el uso de ciertas propiedades de los operadores, tales como la
asociativa, conmutativa, y distributiva; así como la reducción de expresiones
comunes.
El objetivo es 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 cuádruplas: optimizar en uso de los
registros o de las variables temporales.
·
Ensamblador/Código máquina: convertir saltos
a saltos cortos, reordenar instrucciones. Representaciones de código para
extraer información: grafos.
Cambia la representación intermedia de modo que la fase final de generación de
código producirá código que se ejecutará más rápido u ocupara menos espacio o
ambas cosas.
Se pueden identificar cuatro tipos de optimización:
a) Locales.- Se hacen dentro de una sentencia o grupo de
sentencias. Hay dos tipos la de propagación constante y la de eliminación de
sub-expresiones comunes.
b) De ciclos iterativos.- Se hacen dentro de los ciclos.
c) Globales.- Se efectúan sobre un programa o procedimiento.
d) De mirilla.- Se realizan después de que el código es
seleccionado “atisbando” por una pequeña secuencia de código.

HUMILDAD, CIENCIA Y HONESTIDAD.
No hay comentarios:
Publicar un comentario