Мертвый код
Термин «мертвый код» имеет несколько определений. Некоторые используют этот термин для обозначения кода (т. е. инструкций в памяти), который никогда не может быть выполнен во время выполнения. [1] [2] [3] В некоторых областях программирования компьютерного мертвый код — это раздел исходного кода программы, который выполняется, но результат которого никогда не используется ни в каких других вычислениях. [4] [5] Выполнение мертвого кода приводит к потере времени вычислений и памяти.
Хотя результат неработающего вычисления никогда не может быть использован, он может вызвать исключения или повлиять на какое-то глобальное состояние, поэтому удаление такого кода может изменить выходные данные программы и привести к непреднамеренным ошибкам . Оптимизации компилятора обычно консервативны в своем подходе к удалению мертвого кода, если существует неясность относительно того, повлияет ли удаление мертвого кода на выходные данные программы. Программист может помочь компилятору в этом вопросе, дополнительно используя статические и/или встроенные функции и разрешая использовать оптимизацию времени компоновки .
Пример
[ редактировать ]int foo (int iX, int iY)
{
int iZ = iX/iY;
return iX*iY;
}
В приведенном выше примере, хотя разделение iX от iY вычисляется и никогда не используется, он выдает исключение при делении на ноль. Поэтому удаление мертвого кода может изменить выходные данные программы.
Анализ
[ редактировать ]Устранение мертвого кода — это форма оптимизации компилятора , при которой мертвый код удаляется из программы. Анализ мертвого кода можно выполнить с помощью анализа живых переменных — формы статического анализа кода и анализа потока данных . В этом отличие от анализа недостижимого кода, который основан на анализе потока управления .
Метод устранения мертвого кода относится к тому же классу оптимизаций, что и устранение недостижимого кода и устранение избыточного кода .
В крупных проектах программирования иногда бывает трудно распознать и устранить мертвый код, особенно когда целые модули становятся мертвыми. Тестовые шаблоны могут создать впечатление, что код все еще активен, а иногда язык контракта может потребовать доставки кода, даже если он больше не актуален. [6]
Некоторые IDE (например, Xcode, Visual Studio 2010 [7] и затмение Галилео [8] ) имеют возможность находить мертвый код на этапе компиляции.
В то время как большинство методов оптимизации направлены на удаление мертвого кода из реализации, в крайних формах оптимизации размера иногда может оказаться желательным намеренно вводить и тщательно формировать, казалось бы, мертвый код, когда это позволяет складывать вместе несвязанные разделы кода (и тем самым уменьшать их количество). объединенный размер), чтобы дополнительный код эффективно не вредил первому пути выполнения кода, а использовался для выполнения действий, необходимых для альтернативных путей выполнения, для которых другие участки кода могут стать мертвым кодом. На более функциональном уровне это можно рассматривать как искусственное введение безвредных/полезных побочных эффектов и уменьшение избыточности кода, но это также можно использовать вплоть до уровня кода операции, чтобы разрешить использование более коротких инструкций. , что было бы невозможно при свертывании последовательностей кода без согласованного введения побочных эффектов, вызванных мертвым кодом.
См. также
[ редактировать ]- Устранение мертвого кода
- Дублирующий код
- Недоступный код
- Кодекс старицы
- Мертвый магазин
- 0xDEADC0DE — это магическое число , написанное на Hexspeak и используемое в качестве маркера в OpenWRT . прошивке
Ссылки
[ редактировать ]- ^ «Хунвэй Си, Устранение мертвого кода с помощью зависимых типов» (PDF) . Архивировано из оригинала (PDF) 10 марта 2012 г. Проверено 6 мая 2020 г.
- ^ [1] Архивировано 20 мая 2020 г. на Wayback Machine DO-178B.
- ^ DO-178B Arc.Ask3.Ru/DO-178B.
- ^ Дебре, С.К., Эванс, В., Мут, Р. и Де Саттер, Б. 2000. Методы компилятора для сжатия кода. АКМ Транс. Программа. Ланг. Сист. 22, 2 (март 2000 г.), 378–415.
- ^ Аппель, AW 1998. Современная реализация компилятора на Java. Издательство Кембриджского университета.
- ↑ Дуглас В. Джонс. Обслуживание мертвого кода, риски 8.19 (1 февраля 1989 г.). Архивировано 8 июля 2011 г. на Wayback Machine.
- ^ Хабиб Гейдариан, Microsoft Corp.
- ^ Руководство разработчика Eclipse