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

Si bien el resultado de un cálculo inactivo puede no usarse nunca, 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 del código inactivo si existe alguna ambigüedad en cuanto a si la eliminación del código inactivo afectará la salida del programa. El programador puede ayudar al compilador en este asunto haciendo un uso adicional de funciones estáticas y/o en línea y habilitando el uso de la optimización en 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 utiliza, se generará una excepción cuando se produzca una división por cero. Por lo tanto, la eliminación del código inactivo 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 se elimina el código muerto de un programa. El análisis de código muerto se puede realizar mediante el análisis de variables activas , 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 proyectos de programación de gran envergadura, a veces resulta difícil reconocer y eliminar el código inactivo, en particular cuando módulos enteros dejan de funcionar. El andamiaje de pruebas puede hacer que parezca que el código sigue activo y, en ocasiones, el lenguaje de contrato puede exigir la entrega del código incluso cuando este ya no es relevante. [6]

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

Aunque 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 por tamaño a veces puede ser deseable introducir deliberadamente y dar forma cuidadosamente a un código aparentemente muerto, cuando esto permite plegar juntas secciones de código que de otro modo no estarían relacionadas (y, por lo tanto, reducir su tamaño combinado) de modo que el código adicional no dañe efectivamente la primera ruta de ejecución a través del código, sino que se use 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 la introducción artificial de efectos secundarios inofensivos/útiles y la 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ódigo sin la introducción concertada de efectos secundarios causados ​​por el código muerto.

Véase también

Referencias

  1. ^ "Hongwei Xi, Eliminación de código muerto mediante tipos dependientes" (PDF) . Archivado desde el original (PDF) el 2012-03-10 . Consultado el 2020-05-06 .
  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 compactación de código. ACM Trans. Program. Lang. Syst. 22, 2 (marzo de 2000), 378–415.
  5. ^ Appel, AW 1998 Implementación del compilador moderno en Java. Cambridge University Press.
  6. ^ Douglas W. Jones Mantenimiento de código muerto, Riesgos 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