Введение
Код, который никогда не выполняется.
The term dead code has multiple definitions. Some use the term to refer to code (i. e. instructions in memory) which can never be executed at run time. In some areas of computer programming, dead code is a section in the source code of a program which is executed but whose result is never used in any other computation. The execution of dead code wastes computation time and memory. While the result of a dead computation may never be used, it may raise exceptions or affect some global state, thus removal of such code may change the output of the program and introduce unintended bugs. Compiler optimizations are typically conservative in their approach to dead code removal if there is any ambiguity as to whether removal of the dead code will affect the program output. The programmer may aid the compiler in this matter by making additional use of static and/or inline functions and enabling the use of link time optimization.
Термин "мертвый код" имеет несколько определений. Некоторые используют его для обозначения кода (то есть инструкций в памяти), который никогда не может быть выполнен во время работы программы. В некоторых областях компьютерного программирования мертвый код – это фрагмент исходного кода программы, который выполняется, но его результат никогда не используется в других вычислениях. Выполнение мертвого кода приводит к потере вычислительного времени и памяти. Хотя результат мертвого вычисления может никогда не использоваться, он может вызывать исключения или влиять на глобальное состояние, поэтому удаление такого кода может изменить вывод программы и привести к непредвиденным ошибкам. Оптимизации компилятора обычно осторожны при удалении мертвого кода, если есть хоть малейшие сомнения в том, что удаление повлияет на результат работы программы. Программист может помочь компилятору, активнее используя статические и/или встроенные функции и включив оптимизацию времени компоновки.
The term dead code has multiple definitions. Some use the term to refer to code (i. e. instructions in memory) which can never be executed at run time. In some areas of computer programming, dead code is a section in the source code of a program which is executed but whose result is never used in any other computation. The execution of dead code wastes computation time and memory. While the result of a dead computation may never be used, it may raise exceptions or affect some global state, thus removal of such code may change the output of the program and introduce unintended bugs. Compiler optimizations are typically conservative in their approach to dead code removal if there is any ambiguity as to whether removal of the dead code will affect the program output. The programmer may aid the compiler in this matter by making additional use of static and/or inline functions and enabling the use of link time optimization.
Анализ
Устранение мертвого кода — это форма оптимизации компилятора, при которой мертвый код удаляется из программы. Анализ мертвого кода может быть выполнен с использованием анализа живых переменных, являющегося формой статического анализа кода и анализа потока данных. Это отличается от анализа недостижимого кода, который основан на анализе потока управления. Техника устранения мертвого кода относится к тому же классу оптимизаций, что и устранение недостижимого кода и устранение избыточного кода. В крупных проектах программирования иногда бывает трудно распознать и устранить мертвый код, особенно когда целые модули становятся неиспользуемыми. Тестовая инфраструктура может создавать впечатление, что код все еще используется, а иногда условия контракта могут требовать поставки кода, даже если он больше не актуален. Некоторые IDE (такие как Xcode, Visual Studio 2010 и Eclipse Galileo) способны обнаруживать мертвый код на этапе компиляции. В то время как большинство методов оптимизации стремятся удалить мертвый код в процессе реализации, в крайних случаях оптимизации по размеру иногда может быть желательно намеренно вводить и тщательно формировать, казалось бы, мертвый код, если это позволяет объединять иначе не связанные фрагменты кода (и тем самым уменьшать их общий размер), так что дополнительный код фактически не повлияет на основной путь выполнения, но будет использоваться для выполнения действий, необходимых для альтернативных путей выполнения, в то время как другие фрагменты кода могут стать мертвыми. На более функциональном уровне это можно рассматривать как искусственное введение безвредных или полезных побочных эффектов и уменьшение избыточности кода, но также может применяться и на уровне машинных команд для обеспечения возможности использования более коротких инструкций, что было бы невозможно при объединении последовательностей кода без одновременного введения побочных эффектов, вызванных мертвым кодом.