Eliminación de código muerto


En teoría compilador , eliminación de código muerto (también conocido como DCE , la eliminación de código muerto , código muerto de extracción , o tira de código muerto ) es una optimización del compilador para eliminar código que no afecta a los resultados del programa. Eliminar dicho código tiene varios beneficios: reduce el tamaño del programa, una consideración importante en algunos contextos, y permite que el programa en ejecución evite ejecutar operaciones irrelevantes, lo que reduce su tiempo de ejecución. También puede permitir más optimizaciones simplificando la estructura del programa.El código muerto incluye código que nunca se puede ejecutar ( código inalcanzable ) y código que solo afectavariables muertas (escritas en, pero nunca leídas de nuevo), es decir, irrelevantes para el programa.

El simple análisis de los usos de los valores mostraría que el valor de bdespués de la primera asignación no se usa en el interior foo. Además, bse declara como una variable local en el interior foo, por lo que su valor no se puede utilizar en el exterior foo. Por lo tanto, la variable bestá muerta y un optimizador puede recuperar su espacio de almacenamiento y eliminar su inicialización.

Además, debido a que la primera declaración de retorno se ejecuta incondicionalmente, ninguna ruta de ejecución factible alcanza la segunda asignación a b. Por lo tanto, la asignación es inalcanzable y se puede eliminar. Si el procedimiento tuviera un flujo de control más complejo , como una etiqueta después de la declaración de retorno y gotootra en el procedimiento, entonces podría existir una ruta de ejecución factible para la asignación b.

Además, aunque algunos cálculos se realizan en la función, sus valores no se almacenan en ubicaciones accesibles fuera del alcance de esta función. Además, dado que la función devuelve un valor estático (96), puede simplificarse al valor que devuelve (esta simplificación se denomina plegado constante ).

La mayoría de los compiladores avanzados tienen opciones para activar la eliminación de código muerto, a veces en diferentes niveles. Un nivel inferior solo puede eliminar las instrucciones que no se pueden ejecutar. Es posible que un nivel superior tampoco reserve espacio para variables no utilizadas. Un nivel aún más alto podría determinar instrucciones o funciones que no tienen ningún propósito y eliminarlas.

Un uso común de la eliminación de código muerto es como una alternativa a la inclusión de código opcional a través de un preprocesador . Considere el siguiente código.