Eliminando código inalcanzable

En la teoría del compilador , la eliminación de código inalcanzable es una optimización que elimina el código inalcanzable , es decir, el código que está contenido en el programa, pero que por alguna razón nunca se ejecuta [1] . En el gráfico de flujo de control del programa, este código está contenido en nodos a los que no se puede acceder desde el nodo inicial [2] . La conversión en sí no afecta directamente la velocidad de ejecución del programa, porque las instrucciones eliminadas nunca se ejecutan de todos modos y no consumen tiempo del procesador ; pero tiene un efecto positivo indirecto, reduciendo la presión sobre la memoria caché de instrucciones y ampliando las posibilidades de optimizaciones posteriores que funcionan con el gráfico de flujo de control [1] .  

Ejemplos

Considere el siguiente ejemplo en C :

int foo ( int a ) { intb ; _ b = un << 2 ; devolver b ; b = 47 ; /* Código inalcanzable */ devolver 0 ; /* Código inalcanzable */ }

En este ejemplo, la operación de asignación b = 47y la posterior salida del procedimiento son código inalcanzable, ya que ocurre después del regreso incondicional del procedimiento. Después de que la optimización elimina las operaciones indicadas, obtenemos:

int foo ( int a ) { intb ; _ b = un << 2 ; devolver b ; }

Una práctica común en la depuración de programas es deshabilitar temporalmente parte del código [3] . Esto generalmente se hace comentando esta sección de código (que a menudo es difícil debido a la presencia de otros comentarios en el programa) o directivas de preprocesador (en C / C++#if 0 estas son ... directivas #endif). El uso de la eliminación de código inalcanzable puede servir como una alternativa para desactivar el código con un preprocesador. Considere el siguiente ejemplo de Java :

public static int Muestra () { int a = 5 ; int b = 6 ; intc ; _ c = un + segundo _ if ( falso ) { /* DEPURAR */ System . fuera _ formato ( "%d" , c ); } devuelve c ; }

El código dentro de la declaración ifno se puede ejecutar porque no se puede acceder a él y la optimización lo eliminará por completo.

Algoritmos

Aplicación

Véase también

Notas

  1. 1 2 Diseño e implementación de compiladores avanzados - S. 580.
  2. Ingeniería de un compilador - S. 544.
  3. MSDN paso a paso. Paso 3 - Comentarios de C++. . Consultado el 5 de julio de 2012. Archivado desde el original el 31 de enero de 2022.

Literatura