Термин мертвый код имеет несколько определений. Некоторые используют этот термин для обозначения кода (т.е. инструкций в памяти), который никогда не может быть выполнен во время выполнения. [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] и Eclipse Galileo [8] ) имеют возможность обнаруживать мертвый код на этапе компиляции.
В то время как большинство методов оптимизации стремятся удалить мертвый код в реализации, в крайних формах оптимизации для размера иногда может быть желательно намеренно ввести и тщательно сформировать, казалось бы, мертвый код, когда это позволяет складывать в противном случае несвязанные части кода вместе (и тем самым уменьшать комбинированный размер), так что дополнительный код эффективно не повредит первый путь выполнения через код, но используется для выполнения действий, необходимых для альтернативных путей выполнения, для которых другие разделы кода могут стать мертвым кодом. На более функциональном уровне это можно рассматривать как искусственное введение безвредных / полезных побочных эффектов и уменьшение избыточности кода, но его также можно использовать до уровня кода операции, чтобы разрешить использование более коротких инструкций. , что было бы невозможно при сворачивании кодовых последовательностей без согласованного введения побочных эффектов, вызванных мертвым кодом.
Смотрите также
- Устранение мертвого кода
- Резервный код
- Недостижимый код
- Код Оксбоу
- Мертвый магазин
- 0xDEADC0DE - это магическое число, написанное на Hexspeak, используемое в качестве маркера в прошивке OpenWRT.
Рекомендации
- ^ Хунвэй Си, Устранение мертвого кода через зависимые типы
- ^ [1] DO-178B
- ^ DO-178B Википедия / DO-178B.
- ^ Дебрей, С. К., Эванс, В., Мут, Р., и Де Саттер, Б. 2000. Компиляторные методы для сжатия кода. ACM Trans. Программа. Lang. Syst. 22, 2 (март 2000 г.), 378-415.
- ^ Аппель, AW 1998 Современная реализация компилятора на Java. Издательство Кембриджского университета.
- ↑ Douglas W. Jones Dead Code Maintenance, Risks 8.19 (1 февраля 1989 г.). Архивировано 8 июля 2011 г. в Wayback Machine.
- ^ Хабиб Гейдариан, Microsoft Corp
- ^ Руководство разработчика Eclipse
Внешние ссылки
- Детектор мертвого кода (DCD) просто находит никогда не использовавшийся код в ваших приложениях Java / JEE.
- Сравнения некоторых детекторов мертвого кода Java
- Подключаемый модуль UCDetector Eclipse для поиска мертвого кода Java