WikiDer > Мертвый магазин
В компьютерное программирование, локальная переменная, которой присвоено значение, но не читается никакими последующими инструкциями, называется мертвый магазин. Мертвые хранилища тратят время процессора и память и могут быть обнаружены с помощью статический анализ программы, и удален оптимизирующий компилятор.
Если целью хранилища является намеренная перезапись данных, например, когда пароль удаляется из памяти, оптимизация мертвого хранилища может привести к тому, что запись не произойдет, что приведет к проблеме безопасности.[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]