Eliminación de código muerto
From Wikipedia, the free encyclopedia
En programación, la eliminación de código muerto es una técnica de optimización de software comúnmente llevada a cabo de forma automática por un compilador optimizador que consta en eliminar cualquier tipo de código muerto, código inalcanzable, código redundante y almacenamiento muerto.[1][2] Resulta importante eliminar este tipo de código por varias razones entre las que se enumeran: ahorrar tiempo de cómputo innecesario, evitar accesos a memoria innecesarios y ejecutar código que no se utilice ya que puede arrojar excepciones.[3]
La eliminación del código inactivo puede reducir el tiempo de procesamiento y carga, y puede conducir a una reducción en el uso de recursos, como la cantidad de bytes transferidos.[4]
Históricamente la eliminación de código muerto fue llevada a cabo mediante la información que se obtiene de un análisis de flujo de datos.[5] Luego se publicó un artículo donde se mostraba esta técnica mediante static single assignment form.[6] Más tarde se mejoró el algoritmo removiendo las operaciones de flujo de control innecesarias.[7]
Ejemplo
Suponiendo el siguiente trozo de código:
int foo() {
int a = 24;
int b = 25; // almacenamiento muerto
int c = a << 2;
if (true) //código muerto
c = a << 2; //código redundante
return c;
b = 24; // código inalcanzable
}
Dado que presenta varios errores una eliminación de código muerto debería de dejar el código de la siguiente manera:
int foo() {
int a = 24;
int c = a << 2;
return c;
}
Dependiendo de que algoritmo se usó y de que forma se realice el código resultante puede variar. Utilizando otras técnicas de optimización como el plegamiento de constantes y la propagación de constantes de forma exhaustiva el código se podría llegar a reducir a lo siguiente:
int foo() {
return 24 << 2;
}
O dependiendo del plegamiento y otras técnicas de optimización se podría calcular 24<<2 e incluso eliminar la función y reemplazar cada llamada a la misma, por ese valor.