Le terme « code mort » possède plusieurs définitions. Certains l'utilisent pour désigner du code (c'est-à-dire des instructions en mémoire) qui ne peut jamais être exécuté lors de l'exécution. Dans certains domaines de la programmation informatique , le code mort est une section du code source d'un programme qui est exécutée mais dont le résultat n'est jamais utilisé dans aucun autre calcul. L'exécution de code mort gaspille du temps de calcul et de la mémoire.
Bien que le résultat d'un calcul inutile ne soit jamais utilisé, il peut générer des exceptions ou affecter l'état global du programme. Par conséquent, la suppression de ce code peut modifier le résultat du programme et introduire des bogues inattendus . Les optimisations du compilateur sont généralement prudentes quant à la suppression du code inutile en cas d'ambiguïté quant à son impact sur le résultat. Le programmeur peut faciliter le travail du compilateur en utilisant davantage de fonctions statiques et/ou inline et en activant l' optimisation à l'édition de liens .
C ci-dessus, bien que la division parxzéro soit calculée mais jamais utilisée, une exception SIGFPEy (signal d'erreur de calcul en virgule flottante) sera levée en cas de division par zéro. Par conséquent, la suppression du code inutile peut modifier le résultat du programme.Analyse
L'élimination du code mort est une forme d' optimisation du compilateur qui consiste à supprimer le code inutilisé d'un programme. L'analyse du code mort peut être réalisée à l'aide de l'analyse des variables actives , une forme d' analyse statique du code et de l'analyse du flux de données . Ceci contraste avec l'analyse du code inaccessible, qui repose sur l'analyse du flux de contrôle .
La technique d'élimination du code mort appartient à la même catégorie d'optimisations que l'élimination du code inaccessible et l'élimination du code redondant .
Dans les grands projets de programmation, il est parfois difficile de repérer et d'éliminer le code mort, notamment lorsque des modules entiers deviennent obsolètes. La mise en place de tests automatisés peut donner l'illusion que le code est toujours actif, et il arrive que le langage contractuel exige la livraison du code même lorsqu'il n'est plus pertinent.
Certains IDE (tels que Xcode, Visual Studio 2010 et Eclipse Galileo ) ont la capacité de localiser le code mort pendant la phase de compilation.
Alors que la plupart des techniques d'optimisation visent à supprimer le code mort, dans les cas extrêmes d'optimisation de la taille, il peut être souhaitable d'introduire délibérément et de structurer soigneusement du code apparemment mort. Cela permet de regrouper des sections de code initialement indépendantes (et ainsi de réduire leur taille combinée), de sorte que le code supplémentaire n'affecte pas le chemin d'exécution principal, mais serve à réaliser les actions nécessaires aux chemins d'exécution alternatifs, pour lesquels d'autres sections de code peuvent devenir du code mort. Sur un plan plus fonctionnel, cela peut être vu comme l'introduction artificielle d'effets de bord inoffensifs, voire utiles, et la réduction de la redondance du code. Cette technique peut également être utilisée jusqu'au niveau des opérations pour permettre l'emploi d'instructions plus courtes, ce qui serait impossible sans l'introduction délibérée d'effets de bord induits par le code mort.