Мертвый код - Dead code

Период, термин мертвый код имеет несколько определений. Некоторые используют этот термин для обозначения кода (т.е. инструкций в памяти), который никогда не может быть выполнен во время выполнения.[1][2][3]В некоторых областях компьютерное программирование, мертвый код это раздел в исходный код программы, которая выполняется, но результат которой никогда не используется ни в каких других вычислениях.[4][5] Выполнение мертвого кода тратит время вычислений и память.

Хотя результат мертвого вычисления никогда не может быть использован, он может вызвать исключения или повлиять на какое-то глобальное состояние, поэтому удаление такого кода может изменить вывод программы и ввести непреднамеренные ошибки. Оптимизация компилятора обычно консервативна в своем подходе к удалению мертвого кода, если есть какая-либо двусмысленность в отношении того, повлияет ли удаление мертвого кода на вывод программы. Программист может помочь компилятору в этом вопросе, дополнительно используя статический и / или в соответствии функции и позволяющие использовать оптимизация времени компоновки.

Пример

int фу (int iX, int iY){	int iZ = iX/iY;	возвращаться iX*iY;}

В приведенном выше примере, хотя разделение iX к iY вычисляется и никогда не используется, при делении на ноль будет выдано исключение. Следовательно, удаление мертвого кода может изменить вывод программы.

Анализ

Устранение мертвого кода это форма оптимизация компилятора в котором мертвый код удаляется из программы. Анализ мертвого кода можно выполнить с помощью анализ живых переменных, форма статический анализ кода и анализ потока данных. Это контрастирует с анализом недоступного кода, который основан на поток управления анализ.

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

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

Немного Иды (например, Xcode, Visual Studio 2010[7] и Затмение Галилео[8]) имеют возможность находить мертвый код на этапе компиляции.

В то время как большинство методов оптимизации стремятся удалить мертвый код в реализации, в крайних формах оптимизации для размера иногда может быть желательно намеренно ввести и тщательно сформировать, казалось бы, мертвый код, когда это позволяет складывать в противном случае несвязанные части кода вместе (и тем самым уменьшать их комбинированный размер), так что дополнительный код эффективно не повредит первый путь выполнения через код, но используется для выполнения действий, необходимых для альтернативных путей выполнения, для которых другие разделы кода могут стать мертвым кодом. На более функциональном уровне это можно рассматривать как искусственное введение безвредных / полезных побочных эффектов и уменьшение избыточности кода, но его также можно использовать вплоть до уровня кода операции, чтобы разрешить использование более коротких инструкций. , что было бы невозможно при сворачивании кодовых последовательностей без согласованного введения побочных эффектов, вызванных мертвым кодом.

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

Рекомендации

внешняя ссылка