diversas aplicaciones de todo tipo. Al usuario final de un programa slo le interesan dos cosas: que el programa sea fcil de manejar y que su ejecucin sea lo ms rpida posible. Para mejorar este ltimo aspecto cada da se tienen mas en cuenta las optimizaciones en el cdigo del programa.
Idealmente, los compiladores deberan
producir cdigo objeto que fuera tan bueno como si estuviera escrito directamente por un buen programador. La realidad es que esto es difcil de conseguir y muy pocas veces se alcanza esa meta. Sin embargo, el cdigo generado por el compilador puede ser mejorado por medio de unas transformaciones que se han denominado tradicionalmente optimizaciones
El objetivo es mejorar el programa
objeto para que nos d un rendimiento mayor. La mayora de estas tcnicas vienen a compensar ciertas ineficiencias que aparecen en el lenguaje fuente, ineficiencias que son inherentes al concepto de lenguaje de alto nivel, el cual suprime detalles de la mquina objeto para facilitar la tarea de implementar un algoritmo.
Es importante mencionar que por muchas
optimizaciones que se hayan realizado para mejorar el rendimiento de un programa, siempre se obtendr un mejor rendimiento si se utiliza un algoritmo mejor. Por todo ello, para obtener un buen programa lo primero es ver qu algoritmo utilizamos y si no es posible desarrollar otro ms eficiente. Una vez implementado el mejor algoritmo, ya se puede entonces optimizar el cdigo obtenido a partir de l para mejorar el rendimiento del programa. .
Una funcin de costo : Los criterios ms
comunes que se suelen emplear son el ahorro en el tamao del cdigo, la reduccin del tiempo de ejecucin y la mejora de las necesidades del espacio para los datos del programa.
Una transformacin que preserve el
significado del programa: es lgico que no tendra sentido realizar optimizaciones que modificaran el comportamiento del programa. Aunque parezca evidente, puede haber complicadas optimizaciones que fallen en ese aspecto.
Tcnicas Dependientes de la mquina:
tcnicas que slo se pueden aplicar a una determinada mquina objeto I Tcnicas Independientes de la mquina: tcnicas que son aplicables a cualquier mquina objeto.
Tcnicas locales: consisten en analizar
slo pequeas porciones de cdigo y en realizar mejoras en ellas. Tcnicas globales :Para la aplicacin de las tcnicas globales ser necesario el anlisis de todo el cdigo e identificar cdigo redundante, innecesario, etc.
Las sentencias de un bloque bsico
constituyen una unidad sobre la cual se aplican las optimizaciones locales. Estas optimizaciones se pueden dividir en: Optimizaciones que no modifican la estructura. Son:
Eliminacin de sub-expresiones comunes.
Eliminacin de cdigo muerto. Renombrar variables temporales. Intercambio de sentencias independientes adyacentes.
Transformaciones algebraicas. Son las que
simplifican expresiones y/o reemplazan operaciones costosas de la mquina por otras menos costosas. Adems de este tipo de optimizaciones locales a un bloque bsico, Optimizaciones peephole. Intenta mejorar el rendimiento del programa por medio de reemplazar esa breve secuencia de instrucciones objeto por otra secuencia ms corta y/o ms rpida. Hay varios tipos: Eliminacin de instrucciones redundantes. Optimizaciones en el flujo de control. Uso de instrucciones mquina especficas.
Las tcnicas de optimizacin global se
basan todos ellos en el anlisis global de flujo de datos. Este anlisis se realiza para el cdigo de todo el programa, es decir, a lo largo de los distintos bloques bsicos que forman el cdigo del programa. Hay dos tipos de optimizaciones importantes que se realizan: La localizacin y la asignacin global de