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] .
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.