Мертвый магазин
В компьютерном программировании — «мертвое» хранилище это локальная переменная , которой присвоено значение , но которая не считывается последующей инструкцией . Мертвые хранят впустую процессорное время и память и могут быть обнаружены с помощью статического анализа программы и удалены оптимизирующим компилятором .
Если целью хранилища является преднамеренная перезапись данных, например, когда пароль удаляется из памяти, оптимизация неработающего хранилища может привести к тому, что запись не произойдет, что приведет к проблеме безопасности. [ 1 ] Некоторые системные библиотеки имеют специальные функции, предназначенные для предотвращения таких опасных оптимизаций, например explicit_bzero
на OpenBSD . [ 2 ]
Примеры
[ редактировать ]Ява
[ редактировать ]Пример мертвого хранилища на Java :
// 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>(); // This is a Dead Store, as the ArrayList is never read.
list = getList();
System.out.println(list);
}
private static List<String> getList() {
return new ArrayList<String>(Arrays.asList("Hello"));
}
}
В приведенном выше коде ArrayList<String>
объект был создан, но никогда не использовался. Вместо этого в следующей строке переменная, которая ссылается на нее, указывается на другой объект. ArrayList
который был создан, когда list
был объявлен, теперь его необходимо будет освободить, например, сборщиком мусора .
JavaScript
[ редактировать ]Пример мертвого хранилища в JavaScript :
function func(a, b) {
var x;
var i = 300;
while (i--) {
x = a + b; // dead store
}
}
Код в цикле неоднократно перезаписывает одну и ту же переменную, поэтому его можно сократить до одного вызова. [ 3 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Небезопасная оптимизация компилятора | OWASP» .
- ^ «Страницы руководства OpenBSD» . man.openbsd.org . Проверено 14 мая 2016 г.
- ^ «HTML5 и реальная производительность сайта: седьмая предварительная версия платформы IE9 доступна для разработчиков» .