Мертвый магазин - Dead store

В компьютерное программирование, локальная переменная, которой присвоено значение, но не читается никакими последующими инструкциями, называется мертвый магазин. Мертвые хранилища тратят время процессора и память и могут быть обнаружены с помощью статический анализ программы, и удален оптимизирующий компилятор.

Если целью хранилища является намеренная перезапись данных, например, когда пароль удаляется из памяти, оптимизация мертвого хранилища может привести к тому, что запись не произойдет, что приведет к проблеме безопасности.[1] В некоторых системных библиотеках есть специальные функции, предназначенные для предотвращения таких опасных оптимизаций, например explicit_bzero на OpenBSD.[2]

Примеры

Пример мертвого хранилища на Java:

// DeadStoreExample.javaимпорт java.util.ArrayList;импорт java.util.Arrays;импорт java.util.List;общественный класс DeadStoreExample {    общественный статический пустота основной(Строка[] аргументы) {        Список<Строка> список = новый ArrayList<Строка>(); // Это мертвое хранилище, так как ArrayList никогда не читается.         список = getList();        Система.вне.println(список);    }    частный статический Список<Строка> getList() {        вернуть новый ArrayList<Строка>(Массивы.asList("Здравствуйте"));    }}

В приведенном выше коде ArrayList объект был создан, но никогда не использовался. Вместо этого в следующей строке переменная, которая ссылается на нее, указывает на другой объект. В ArrayList который был создан когда список был объявлен, теперь его нужно будет отменить, например, уборщик мусора.

Пример мертвого магазина на JavaScript:

функция func(а, б) {    вар Икс;    вар я = 300;    в то время как (я--) {        Икс = а + б; // мертвый магазин    }}

«Код в цикле многократно перезаписывает одну и ту же переменную, поэтому его можно сократить до одного вызова».[3]

Смотрите также

использованная литература

  1. ^ https://www.owasp.org/index.php/Insecure_Compiler_Optimization
  2. ^ "Справочные страницы OpenBSD". man.openbsd.org. Получено 2016-05-14.
  3. ^ «HTML5 и производительность сайта в реальном мире: седьмая предварительная версия платформы IE9 доступна для разработчиков».