Diferencia Entre Optimización De Código Dependiente E Independiente De La Máquina

Tabla de contenido:

Diferencia Entre Optimización De Código Dependiente E Independiente De La Máquina
Diferencia Entre Optimización De Código Dependiente E Independiente De La Máquina

Vídeo: Diferencia Entre Optimización De Código Dependiente E Independiente De La Máquina

Vídeo: Diferencia Entre Optimización De Código Dependiente E Independiente De La Máquina
Vídeo: Compiladores - Optimización de Código P1 2024, Noviembre
Anonim

Diferencia clave: optimización del código dependiente de la máquina frente a la independiente de la máquina

Los programas de computadora son conjuntos de instrucciones dadas al hardware para realizar tareas. Estos programas están escritos en su mayoría en lenguajes de alto nivel y la computadora no entiende ese lenguaje. Por lo tanto, se utiliza un compilador para convertir esas instrucciones en código máquina o código de destino. Pasa por varias fases para construir el código de destino. La optimización de código es uno de ellos. Hay dos técnicas de optimización como, optimización de código dependiente de la máquina e independiente de la máquina. La diferencia clave entre la optimización del código dependiente de la máquina y la independiente de la máquina es que la optimización dependiente de la máquina se aplica al código objeto mientras que la optimización del código independiente de la máquina se aplica al código intermedio.

CONTENIDO

1. Descripción y clave Diferencia

2. ¿Qué es la optimización del código dependiente de la máquina

3. ¿Cuál es independiente de la máquina optimización de código

4. Similitudes entre dependiente de la máquina y optimización de código independiente de la máquina

5. Comparación lado a lado - dependiente de la máquina frente a la optimización del código independiente de la máquina en forma de tabla

6. Resumen

¿Qué es la optimización de código dependiente de la máquina?

Al convertir el código fuente en código objeto o código de destino, el compilador pasa por varias fases. Primero, el código fuente se le da al analizador Lexical que produce tokens. Luego, la salida se entrega al analizador de sintaxis que investiga si los tokens generados están en orden lógico. Esa salida se le da al analizador semántico. Suponga que hay un fragmento de código como p = q + r;

Aquí, p, q son números enteros, pero r es un flotante. Usando el analizador semántico, la variable de entero c se convierte en un flotante. Por tanto, realiza el análisis semántico. La salida del analizador semántico va al generador de código intermedio. Devuelve un código intermedio que luego va al optimizador de código. La optimización del código es el proceso de eliminar las declaraciones del programa no esenciales sin cambiar el significado del código fuente real. No es una optimización obligatoria, pero puede mejorar el tiempo de ejecución del código de destino. La salida del optimizador de código se entrega al generador de código y, finalmente, se crea el código de destino.

Diferencia entre optimización de código dependiente e independiente de la máquina
Diferencia entre optimización de código dependiente e independiente de la máquina

Figura 01: Fases del compilador

En la optimización del código dependiente de la máquina, la optimización se aplica al código fuente. La asignación de una cantidad suficiente de recursos puede mejorar la ejecución del programa en esta optimización.

¿Qué es la optimización de código independiente de la máquina?

Cuando la optimización se realiza en el código intermedio, se denomina optimización de código independiente de la máquina. Existen diferentes técnicas para lograr la optimización del código independiente de la máquina. Se describen utilizando los siguientes ejemplos.

Lea las siguientes líneas de código.

para (j = 0; j <10; j ++) {

b = x + 2;

a [j] = 5 * j;

}

De acuerdo con el código anterior, b = x + 2 se calcula una y otra vez en cada iteración. Una vez que se calcula b, no cambia. Entonces, esta línea se puede colocar fuera del ciclo de la siguiente manera.

b = x + 2;

para (j = 0; j <10; j ++)

{a [j] = 5 * j;

}

A esto se le llama movimiento de código.

Lea las siguientes líneas de código.

j = 5;

si (j == 10) {

a = b + 20;

}

De acuerdo con el código anterior, 'if block' nunca se ejecutará porque el valor j nunca será igual a 10. Ya está inicializado con el valor 5. Por lo tanto, este bloque if se puede eliminar. Esta técnica es eliminación de código muerto.

Otro método es la reducción de la fuerza. Las operaciones aritméticas como la multiplicación requieren más memoria, tiempo y ciclos de CPU. Estas expresiones caras se pueden reemplazar por expresiones baratas como b = a * 2; o puede ser reemplazado por la adición, b = a + a;

Consulte el siguiente código.

para (j = 1; j <= 5; j ++) {

valor = j * 5;

}

En lugar de la multiplicación, el código se puede cambiar de la siguiente manera.

int temp = 5;

para (j = 1; j <= 5; j ++) {

temp = temp + 5;

valor = temp;

}

Es posible evaluar las expresiones que son constantes en tiempo de ejecución. Se llama plegado constante. Puede establecerse como b [j + 1] = c [j + 1];

En cambio, se puede cambiar de la siguiente manera.

n = j +1;

b [n] = c [n];

Puede haber bucles de la siguiente manera.

para (j = 0; j <5; j ++) {

printf ("a / n");

}

para (j = 0; j <5; j ++) {

printf ("b / n");

}

Al imprimir ayb, ambos tienen el mismo número de iteraciones. Ambos se pueden combinar en un bucle for de la siguiente manera.

para (j = 0; j <5; j ++) {

printf ("a / n");

printf ("b / n");

}

Otra técnica importante es la eliminación de la subexpresión común. Es reemplazar las expresiones idénticas con una sola variable para hacer el cálculo. Consulte el código de abajo.

a = b * c + k;

d = b * c + m;

Este código se puede convertir de la siguiente manera.

temp = b * c;

a = temp + k;

d = temp + m;

No es necesario calcular b * c una y otra vez. El valor multiplicado puede almacenarse en una variable y reutilizarse.

¿Cuál es la similitud entre la optimización de código dependiente de la máquina y la independiente de la máquina?

Ambos pertenecen a la optimización de código

¿Cuál es la diferencia entre la optimización de código dependiente de la máquina y la independiente de la máquina?

Diferencia del medio del artículo antes de la mesa

Optimización de código dependiente de la máquina vs independiente de la máquina

La optimización del código dependiente de la máquina se aplica al código objeto. La optimización de código independiente de la máquina se aplica al código intermedio.
Participación con el hardware
La optimización dependiente de la máquina implica registros de CPU y referencias de memoria absolutas. La optimización del código independiente de la máquina no implica registros de CPU ni referencias de memoria absolutas.

Resumen: optimización del código dependiente de la máquina frente a la independiente de la máquina

La optimización del código consta de dos técnicas de optimización, a saber, la optimización del código dependiente de la máquina y la optimización del código independiente de la máquina. La diferencia entre la optimización del código dependiente de la máquina y la independiente de la máquina es que la optimización dependiente de la máquina se aplica al código objeto, mientras que la optimización del código independiente de la máquina se aplica al código intermedio.

Descargue la versión PDF de optimización de código dependiente de la máquina frente a la independiente

Puede descargar la versión PDF de este artículo y utilizarla para fines sin conexión según la nota de cita. Descargue la versión en PDF aquí Diferencia entre optimización de código dependiente e independiente de la máquina

Recomendado: