En programación informática , un almacén inactivo es una variable local a la que se le asigna un valor pero que no es leída por ninguna instrucción posterior . Los almacenes inactivos desperdician tiempo de procesador y memoria , y pueden detectarse mediante el uso de análisis de programas estáticos y eliminarse mediante un compilador optimizador .
Si el propósito de un almacenamiento es sobrescribir datos intencionalmente, por ejemplo cuando se elimina una contraseña de la memoria, las optimizaciones de almacenamiento inactivas pueden provocar que la escritura no se realice, lo que genera un problema de seguridad. [1] Algunas bibliotecas del sistema tienen funciones específicas diseñadas para evitar tales optimizaciones peligrosas, por ejemplo, explicit_bzero
en OpenBSD . [2]
Ejemplo de almacén muerto en Java :
// DeadStoreExample.java importar java.util.ArrayList ; importar java.util.Arrays ; importar java.util.List ; public class DeadStoreExample { public static void main ( String [] args ) { List < String > list = new ArrayList < String > (); // Este es un Dead Store, ya que ArrayList nunca se lee. list = getList ( ) ; System.out.println ( list ) ; } lista estática privada < String > getList () { devolver nueva ArrayList < String > ( Arrays . asList ( "Hola" )); } }
En el código anterior, ArrayList<String>
se creó una instancia de un objeto, pero nunca se lo utilizó. En cambio, en la siguiente línea, la variable que lo referencia se configura para que apunte a un objeto diferente. El ArrayList
objeto que se creó cuando list
se declaró ahora deberá ser desasignado, por ejemplo, por un recolector de elementos no utilizados .
Ejemplo de almacén inactivo en JavaScript :
función func ( a , b ) { var x ; var i = 300 ; while ( i-- ) { x = a + b ; // almacén muerto } }
El código en el bucle sobrescribe repetidamente la misma variable, por lo que puede reducirse a una sola llamada. [3]