stringtranslate.com

Мертвый код

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

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

Пример

int foo ( int iX , int iY ) { int iZ = iX / iY ;        вернуть iX * iY ; } 

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

Анализ

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

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

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

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

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

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

Ссылки

  1. ^ "Hongwei Xi, Dead Code Elimination through Dependent Types" (PDF) . Архивировано из оригинала (PDF) 2012-03-10 . Получено 2020-05-06 .
  2. ^ [1] Архивировано 20.05.2020 в Wayback Machine DO-178B
  3. ^ DO-178B Википедия/DO-178B.
  4. ^ Дебрей, СК, Эванс, В., Мут, Р. и Де Саттер, Б. 2000. Методы компиляции для уплотнения кода. ACM Trans. Program. Lang. Syst. 22, 2 (март 2000), 378–415.
  5. ^ Аппель, А. В. 1998 Современная реализация компилятора на Java. Издательство Кембриджского университета.
  6. ^ Дуглас В. Джонс , Техническое обслуживание мертвого кода, Риски 8.19 (1 февраля 1989 г.) Архивировано 08.07.2011 на Wayback Machine
  7. ^ Хабиб Хейдариан, Microsoft Corp.
  8. ^ Руководство разработчика Eclipse

Внешние ссылки