
- Compilador - Inicio
- Compilador - Descripción General
- Compilador - Arquitectura
- Compilador - las Fases del Compilador
- Compilador - Análisis Léxico
- Compilador - Expresiones Regulares
- Compilador - Autómatas Finitos
- Compilador - Sintaxis Anã¡lisis
- Compilador - Tipos de Análisis
- Compilador - Analizador Descendente
- Compilador - Analizador Ascendente
- Compilador - Recuperación de Errores
- Compilador - Análisis Semántico
- Compilador - Entorno de Ejecución en Tiempo Real
- Compilador - Tabla de Símbolos
- Compiler - Intermediate Code
- Compilador - Generación de Código
- Compilador - Optimización de Código
Compilador Diseo - Optimizacin de Cdigo
Optimizacin es un programa transformacin tcnica, que trata de mejorar el cdigo por lo que consumen menos recursos (es decir CPU, memoria) y ofrecer una alta velocidad.
En la optimizacin de alto nivel general de programacin son sustituidos por construcciones muy eficiente de bajo nivel los cdigos de programacin. Un cdigo proceso en fase de optimizacin debe seguir las tres normas que se explican a continuacin:
El cdigo de salida no debe, de ninguna manera, cambiar el sentido del programa.
Optimizacin debe aumentar la velocidad del programa y si es posible, el programa debe exigir menos cantidad de recursos.
Optimizacin debe ser rpido y no debe retrasar el proceso de compilacin general.
Los esfuerzos para un cdigo optimizado puede ser utilizado en los distintos niveles de elaboracin del proceso.
Al principio, los usuarios pueden cambiar o reorganizar el cdigo o utilizar las mejores algoritmos para escribir el cdigo.
Despus de generar cdigo intermedio, el compilador puede modificar el cdigo intermedio por direccin los clculos y mejorar los lazos.
Al tiempo que se produce la mquina de destino cdigo, el compilador puede hacer uso de jerarqua de memoria y registros de la CPU.
La optimizacin puede clasificarse en dos grandes categoras: independiente de la mquina y depende de la mquina.
Optimizacin independiente de la mquina
En esta optimizacin, el compilador toma en el cdigo intermedio y transforma una parte del cdigo que no implique un registros de la CPU y/o ubicaciones de memoria absoluta. Por ejemplo:
do { item = 10; value = value + item; } while(value Este cdigo implica repetir la asignacin de elemento identificador, que si ponemos esta forma: Item = 10; do { value = value + item; } while(value No slo debe guardar los ciclos de la CPU, pero puede ser utilizada en cualquier procesador. Optimizacin dependientes de la mquina Dependientes de La Mquina optimizacin se realiza despus de que el cdigo de destino se ha generado y cuando el cdigo se transforman de acuerdo a la arquitectura del equipo de destino. Registros de la CPU se trata y puede tener referencias de memoria absoluta en lugar de referencias relativas. Optimizadores dependientes de la mquina que los esfuerzos para aprovechar al mximo de jerarqua de memoria. Bloques bsicos Por lo general, los cdigos fuente tienen una serie de instrucciones que se ejecutan siempre en orden y estn consideradas como los bloques bsicos del cdigo. Estos dos bloques bsicos no tienen instrucciones de salto entre ellos, es decir, cuando la primera se ejecuta la instruccin, todas las instrucciones en el mismo bloque bsico ser ejecutado en su secuencia de aparicin sin perder el control de flujo del programa. Un programa puede tener diversas construcciones como bloques bsicos, como IF-THEN-ELSE, SWITCH-CASE las sentencias condicionales, bucles, como DO-WHILE, FOR y REPETIR HASTA QUE, etc. Identificacin del bloque bsico Podemos utilizar el siguiente algoritmo para encontrar los bloques bsicos en un programa:
-
Declaraciones del cabezal Bsqueda de todos los bloques bsicos desde donde se inicia un bloque bsico:
- Primera declaracin de un programa.
- Las declaraciones que son objetivo de cualquier rama (condicional o incondicional).
- Las declaraciones que siguen cualquier rama.
Las declaraciones del cabezal y las declaraciones siguientes forman un bloque bsico.
Un bloque bsico no incluye cualquier cabezal declaracin de cualquier otro bloque bsico.
Bloques bsicos son conceptos importantes de generacin de cdigo y optimizacin punto de vista.

Bloques bsicos desempean un papel importante para identificar las variables, que se estn utilizando ms de una vez en un nico bloque bsico. Si cualquier variable se utiliza ms de una vez, el registro memoria asignada a la variable no es necesario vaciar el bloque a menos que termine la ejecucin.
Flujo de Control Grfico
Bloques bsicos en un programa puede ser representado por medio de grficos de flujo de control. Un flujo de control grfico se muestra cmo el control del programa se pasa entre los bloques. Es una herramienta til que ayuda en la optimizacin por ayudar a localizar cualquier bucles no deseados en el programa.

Optimizacin Bucle
La mayora de los programas se ejecutan como un bucle en el sistema. Se hace necesario optimizar los lazos con el fin de ahorrar ciclos de CPU y memoria. Los loops pueden ser optimizados por las siguientes tcnicas:
Cdigo invariante: un fragmento de cdigo que reside en el bucle y calcula el mismo valor en cada iteracin se denomina bucle de cdigo invariante. Este cdigo puede ser trasladado fuera del circuito de ahorro que se calculan slo una vez, en lugar de en cada iteracin.
Induccin anlisis: una variable se denomina induccin variable si su valor es modificado en el bucle de un bucle de valor invariable.
Fuerza reduccin: Hay expresiones que consumen ms ciclos de CPU, el tiempo y la memoria. Estas expresiones deben reemplazarse con las expresiones ms baratos sin comprometer el resultado de expresin. Por ejemplo, la multiplicacin (x * 2) es costosa en trminos de ciclos de CPU que (x << 1) y el mismo resultado.
Eliminacin de cdigo muerto
Cdigo Muerto es uno o ms de un cdigo, que son:
- O nunca ejecutados o inalcanzable,
- O si se ejecuta, su produccin nunca se utiliza.
Por lo tanto, cdigo muerto juega papel alguno en cualquier operacin del programa y que, por lo tanto, puede eliminarse simplemente.
Cdigo muerto parcialmente
Hay algunas instrucciones de cdigo cuyo valores calculados se utilizan slo en determinadas circunstancias, es decir, a veces se utilizan los valores y a veces no lo son. Estos cdigos son conocidos como parte de cdigo.

El flujo de control grfico se muestra un fragmento de programa donde variable "a" se utiliza para asignar la salida de expresin x * y. Supongamos que el valor asignado a 'a' nunca se utiliza dentro del bucle.Inmediatamente despus de la salida del bucle de control, 'a' se le asigna el valor de la variable z, que se utilizarn posteriormente en el programa. Podemos concluir que el cdigo de asignacin de la letra 'a' nunca es utilizado en cualquier parte, por lo tanto, es elegible para ser eliminado.

Del mismo modo, la imagen de arriba muestra que la instruccin condicional siempre es falso, lo que implica que el cdigo, escrito en cierto caso, nunca se ejecutar, por lo que se puede quitar.
Redundancia Parcial
Las expresiones redundantes se calculan ms de una vez en ruta paralela, sin ningn cambio de operandos.mientras que parcial de las expresiones redundantes se calculan ms de una vez en el camino, sin ningn cambio de operandos. Por ejemplo,
![]() Expresin] [redundante |
![]() [Parcialmente redundante expresin] |
Loop-invariante cdigo es parcialmente redundante y pueden ser eliminados mediante un cdigo de movimiento tcnica.
Otro ejemplo de cdigo parcialmente redundante puede ser:
If (condition) { a = y OP z; } else { ... } c = y OP z;
Vamos a asumir que los valores de los operandos (y Y z) no se cambian de asignacin de variable a variable c. Aqu, si la condicin es verdadera, y OP z se calcula dos veces, si no, una vez. Movimiento cdigo se puede utilizar para eliminar esta redundancia, como se muestra a continuacin:
If (condition) { ... tmp = y OP z; a = tmp; ... } else { ... tmp = y OP z; } c = tmp;
En este caso, si la condicin es verdadera o falsa; y OP z debe calcularse slo una vez.