stringtranslate.com

código muerto

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 puede ejecutar en tiempo de ejecución. [1] [2] [3] En algunas áreas de la programación informática , el código muerto es una sección del código fuente de un programa que se ejecuta pero cuyo resultado nunca se utiliza en ningún otro cálculo. [4] [5] La ejecución de código inactivo desperdicia tiempo y memoria de cálculo.

Si bien es posible que el resultado de un cálculo inactivo 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 para la eliminación del código inactivo si existe alguna ambigüedad sobre si la eliminación del código inactivo 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 permitiendo el uso de optimización del tiempo de enlace .

Ejemplo

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

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

Análisis

La eliminación de código muerto es una forma de optimización del compilador en la que se elimina el código muerto de un programa. El análisis de código muerto se puede realizar mediante 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. El andamiaje de prueba puede hacer que parezca que el código aún 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. [6]

Algunos IDE (como Xcode, Visual Studio 2010 [7] y Eclipse Galileo [8] ) tienen la capacidad de localizar código inactivo 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 para el tamaño a veces puede ser deseable introducir deliberadamente y darle forma cuidadosamente a código aparentemente muerto, cuando esto permite plegar secciones de código que de otro modo no estarían relacionadas (y así reducir su tamaño). tamaño combinado) de modo que el código adicional efectivamente no dañe 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 de ejecución alternativas, por lo que 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 puede usarse hasta el nivel de código de operación para permitir el uso de instrucciones más cortas. , lo que no sería posible al plegar secuencias de códigos sin la introducción concertada de efectos secundarios causados ​​por el código muerto.

Ver también

Referencias

  1. ^ "Hongwei Xi, eliminación de códigos muertos mediante tipos dependientes" (PDF) . Archivado desde el original (PDF) el 10 de marzo de 2012 . Consultado el 6 de mayo de 2020 .
  2. ^ [1] Archivado el 20 de mayo de 2020 en Wayback Machine DO-178B
  3. ^ DO-178B Wikipedia/DO-178B.
  4. ^ Debray, SK, Evans, W., Muth, R. y De Sutter, B. 2000. Técnicas de compilación para la compactación de código. Transmisión ACM. Programa. Lang. Sistema. 22, 2 (marzo de 2000), 378–415.
  5. ^ Appel, AW 1998 Implementación del compilador moderno en Java. Prensa de la Universidad de Cambridge.
  6. ^ Douglas W. Jones Dead Code Maintenance, Risks 8.19 (1 de febrero de 1989) Archivado el 8 de julio de 2011 en Wayback Machine.
  7. ^ Habib Heydarian, Microsoft Corp.
  8. ^ Guía para desarrolladores de Eclipse

enlaces externos