stringtranslate.com

Tienda muerta

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_bzeroen OpenBSD . [2]

Ejemplos

Java

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 ArrayListobjeto que se creó cuando listse declaró ahora deberá ser desasignado, por ejemplo, por un recolector de elementos no utilizados .

JavaScript

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]

Véase también

Referencias

  1. ^ "Optimización del compilador inseguro | OWASP".
  2. ^ "Páginas del manual de OpenBSD". man.openbsd.org . Consultado el 14 de mayo de 2016 .
  3. ^ "HTML5 y rendimiento de sitios en el mundo real: séptima versión preliminar de la plataforma IE9 disponible para desarrolladores".