Almacenamiento muerto
En programación se conoce como almacenamiento muerto o dead store a la acción de asignarle un valor cualquiera a una variable local y no utilizarlo en ninguna instrucción subsecuente.[1] Este tipo de error de software es indeseable debido a que requiere tiempo de computación y accesos a memorias de forma innecesaria, lo que impacta en el rendimiento.
Existen técnicas de optimización en compiladores como por ejemplo la eliminación de código muerto que intentan encontrar y eliminar este tipo de prácticas del código fuente.[2]
Si el propósito de una variable es la intención de sobrescribir un dato, por ejemplo, cuando una contraseña se está eliminando de la memoria, las optimizaciones de almacenamiento muerto puede causar que la escritura no ocurra, provocando un problema de seguridad.[3] Algunos sistemas tienen librerías específicas diseñadas para evitar estas peligrosas optimizaciones. Por ejemplo explicit_bzero
en OpenBSD.[4]
Ejemplo
public int sum(int a, int b){
int c = a + b;
return a+b;
En este caso la variable c se asigna pero nunca se usa (este ejemplo también puede ser tomado como código redundante ya que se devuelve el mismo valor que tiene c).
Esta optimización puede llegar a brindar buenos resultados cuando el almacenamiento muerto se encuentra ubicado dentro de bucles ya que la optimización se lleva a cabo tantas veces como grande sea el índice del bucle.
function func(a, b) {
var x;
var i = 300;
while (i--) {
x = a + b; // no se usa
}
}
En este caso si se logra identificar el almacenamiento muerto y retirar se optimizaría 300 veces por cada llamada a la función.
Referencias
- «FindBugs Bug Descriptions». Consultado el 17 de enero de 2013. «Inglés ».
- «HTML5, and Real World Site Performance: Seventh IE9 Platform Preview Available for Developers» (en inglés). Consultado el 17 de enero de 2013.
- «Insecure Compiler Optimization» (en inglés). Consultado el 22 de noviembre de 2016.
- «OpenBSD manual pages». Consultado el 28 de noviembre de 2016.