Código muerto - Dead code

El término código muerto tiene múltiples definiciones. Algunos usan el término para referirse al código (es decir, instrucciones en la memoria) que nunca se pueden ejecutar en tiempo de ejecución. En algunas áreas de la programación de computadoras , el código muerto es una sección del código fuente de un programa que se ejecuta pero cuyo resultado nunca se usa en ningún otro cálculo. La ejecución de código muerto desperdicia tiempo de cálculo y memoria.

Si bien el resultado de un cálculo inactivo puede que nunca se utilice, puede generar excepciones o afectar algún estado global, por lo que la eliminación de dicho código puede cambiar la salida del programa e introducir errores no deseados . Las optimizaciones del compilador suelen ser conservadoras en su enfoque de la eliminación de código muerto si existe alguna ambigüedad en cuanto a si la eliminación del código muerto afectará la salida del programa. El programador puede ayudar al compilador en este asunto haciendo uso adicional de funciones estáticas y / o en línea y habilitando el uso de optimización de tiempo de enlace .

Ejemplo

int foo (int iX, int iY)
{
	int iZ = iX/iY;

	return iX*iY;
}

En el ejemplo anterior, aunque la división de iX por iY se calcula y nunca se usa, generará una excepción cuando se produzca una división por cero. Por lo tanto, la eliminación del código muerto puede cambiar la salida del programa.

Análisis

La eliminación de código muerto es una forma de optimización del compilador en la que el código muerto se elimina de un programa. El análisis de código muerto se puede realizar mediante el análisis de variables en vivo , una forma de análisis de código estático y análisis de flujo de datos . Esto contrasta con el análisis de código inalcanzable que se basa en el análisis de flujo de control .

La técnica de eliminación de código muerto pertenece a la misma clase de optimizaciones que la eliminación de código inalcanzable y la eliminación de código redundante .

En grandes proyectos de programación, a veces es difícil reconocer y eliminar el código inactivo, especialmente cuando módulos enteros quedan inactivos. Los andamios de prueba pueden hacer que parezca que el código todavía está activo y, en ocasiones, el lenguaje del contrato puede requerir la entrega del código incluso cuando el código ya no es relevante.

Algunos IDE (como Xcode, Visual Studio 2010 y Eclipse Galileo) tienen la capacidad de localizar código muerto durante la etapa de compilación.

Si bien la mayoría de las técnicas de optimización buscan eliminar el código muerto en una implementación, en formas extremas de optimización de tamaño, a veces puede ser deseable introducir deliberadamente y dar forma cuidadosamente a un código aparentemente muerto, cuando permite plegar secciones de código que de otro modo no estarían relacionadas (y así reducir su tamaño combinado) para que el código adicional no dañe efectivamente la primera ruta de ejecución a través del código, sino que se utilice para llevar a cabo las acciones necesarias para las rutas alternativas de ejecución, para las cuales otras secciones del código pueden convertirse en código muerto. En un nivel más funcional, esto puede verse como una introducción artificial de efectos secundarios inofensivos / útiles y una reducción de la redundancia del código, pero también se puede usar hasta el nivel de código de operación para permitir el uso de instrucciones más cortas. , que no sería posible al plegar secuencias de código sin la introducción concertada de los efectos secundarios causados ​​por el código muerto.

Ver también

Referencias

enlaces externos