Мертвый магазин
В компьютерном программировании — «мертвое» хранилище это локальная переменная , которой присвоено значение , но которая не считывается последующей инструкцией . Мертвые хранят впустую процессорное время и память и могут быть обнаружены с помощью статического анализа программы и удалены оптимизирующим компилятором .
Если целью хранилища является преднамеренная перезапись данных, например, когда пароль удаляется из памяти, оптимизация неработающего хранилища может привести к тому, что запись не произойдет, что приведет к проблеме безопасности. [1] Некоторые системные библиотеки имеют специальные функции, предназначенные для предотвращения таких опасных оптимизаций, например explicit_bzero
на OpenBSD . [2]
Примеры
[ редактировать ]Ява
[ редактировать ]Пример мертвого хранилища на Java :
// DeadStoreExample.java import java.util.ArrayList ; импортировать java.util.Arrays ; импортировать java.util.List ; общественный класс DeadStoreExample { public static void main ( String [] args ) { List < String > list = new ArrayList < String > (); // Это мертвое хранилище, поскольку ArrayList никогда не читается. список = получить список (); Система . вне . println ( список ); } Private static List < String > getList () { return new ArrayList < String > ( Arrays . asList ( "Hello" )); } }
В приведенном выше коде ArrayList<String>
объект был создан, но никогда не использовался. Вместо этого в следующей строке переменная, которая ссылается на нее, указывается на другой объект. ArrayList
который был создан, когда list
был объявлен, теперь его необходимо будет освободить, например, с помощью сборщика мусора .
JavaScript
[ редактировать ]Пример мертвого хранилища в JavaScript :
функция func ( a , b ) { var x ; вар я = 300 ; в то время как ( я -- ) { Икс знак равно а + б ; // мертвый магазин } }
Код в цикле неоднократно перезаписывает одну и ту же переменную, поэтому его можно сократить до одного вызова. [3]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Небезопасная оптимизация компилятора | OWASP» .
- ^ «Страницы руководства OpenBSD» . man.openbsd.org . Проверено 14 мая 2016 г.
- ^ «HTML5 и реальная производительность сайта: седьмая предварительная версия платформы IE9 доступна для разработчиков» .