En la programación de computadoras , una variable local a la que se le asigna un valor pero que no es leída por ninguna instrucción posterior se denomina almacenamiento muerto . Los almacenes muertos desperdician tiempo de procesador y memoria, y pueden detectarse mediante el uso de análisis de programas estáticos y eliminarse mediante un compilador de optimización .
Si el propósito de una tienda es sobreescribir datos intencionalmente, por ejemplo, cuando se elimina una contraseña de la memoria, las optimizaciones de la tienda muertas pueden hacer que la escritura no ocurra, lo que genera un problema de seguridad. [1] Algunas bibliotecas del sistema tienen funciones específicas diseñadas para evitar optimizaciones tan peligrosas, por ejemplo, explicit_bzero
en OpenBSD. [2]
Ejemplos de
Ejemplo de Java de una tienda muerta:
// DeadStoreExample.java import java.util.ArrayList ; import java.util.Arrays ; import java.util.List ;public class DeadStoreExample { public static void main ( String [] args ) { List < String > list = new ArrayList < String > (); // Esta es una tienda muerta, ya que ArrayList nunca se lee. lista = getList (); Sistema . fuera . println ( lista ); } Lista estática privada < Cadena > getList () { return new ArrayList < Cadena > ( Arrays . asList ( "Hola" )); } }
En el código anterior, se creó una ArrayList
instancia de un objeto, pero nunca se usó. En cambio, en la siguiente línea, la variable que hace referencia a ella está configurada para apuntar a un objeto diferente. El ArrayList
que se creó cuando list
se declaró ahora deberá ser desasignado, por ejemplo, por un recolector de basura .
Ejemplo de JavaScript de una tienda muerta:
función func ( a , b ) { var x ; var i = 300 ; mientras que ( i - ) { x = a + b ; // tienda muerta } }
"El código en el bucle sobrescribe repetidamente la misma variable, por lo que se puede reducir a una sola llamada". [3]
Ver también
Referencias
- ^ https://www.owasp.org/index.php/Insecure_Compiler_Optimization
- ^ "Páginas de manual de OpenBSD" . man.openbsd.org . Consultado el 14 de mayo de 2016 .
- ^ "HTML5 y rendimiento del sitio en el mundo real: séptima vista previa de la plataforma IE9 disponible para desarrolladores" .