Código morto - Dead code

O termo código morto possui várias definições. Alguns usam o termo para se referir ao código (ou seja, instruções na memória) que nunca pode ser executado em tempo de execução. Em algumas áreas da programação de computadores , o código morto é uma seção no código-fonte de um programa que é executado, mas cujo resultado nunca é usado em qualquer outro cálculo. A execução de código morto desperdiça tempo de computação e memória.

Embora o resultado de um cálculo morto nunca possa ser usado, ele pode levantar exceções ou afetar algum estado global, portanto, a remoção de tal código pode alterar a saída do programa e introduzir bugs não intencionais . As otimizações do compilador são tipicamente conservadoras em sua abordagem à remoção do código morto se houver qualquer ambigüidade quanto a se a remoção do código morto afetará a saída do programa. O programador pode ajudar o compilador nesta questão, fazendo uso adicional de funções estáticas e / ou embutidas e permitindo o uso de otimização de tempo de link .

Exemplo

int foo (int iX, int iY)
{
	int iZ = iX/iY;

	return iX*iY;
}

No exemplo acima, embora a divisão de iX por iY seja calculada e nunca usada, ela lançará uma exceção quando ocorrer uma divisão por zero. Portanto, a remoção do código morto pode alterar a saída do programa.

Análise

A eliminação do código morto é uma forma de otimização do compilador em que o código morto é removido de um programa. A análise de código morto pode ser realizada usando análise de variável ao vivo , uma forma de análise de código estático e análise de fluxo de dados . Isso contrasta com a análise de código inacessível que se baseia na análise de fluxo de controle .

A técnica de eliminação de código morto está na mesma classe de otimizações da eliminação de código inacessível e eliminação de código redundante .

Em grandes projetos de programação, às vezes é difícil reconhecer e eliminar código morto, especialmente quando módulos inteiros ficam mortos. O scaffolding de teste pode fazer parecer que o código ainda está ativo e, às vezes, a linguagem do contrato pode exigir a entrega do código, mesmo quando o código não é mais relevante.

Alguns IDEs (como Xcode, Visual Studio 2010 e Eclipse Galileo) têm a capacidade de localizar código morto durante o estágio de compilação.

Embora a maioria das técnicas de otimização busque remover o código morto em uma implementação, em formas extremas de otimização para tamanho, às vezes pode ser desejável introduzir deliberadamente e modelar cuidadosamente o código aparentemente morto, quando isso permite dobrar seções de código não relacionadas de outra forma (e, assim, reduzir seus tamanho combinado) para que o código extra efetivamente não prejudique o primeiro caminho de execução através do código, mas seja usado para realizar as ações necessárias para os caminhos alternativos de execução, para os quais outras seções do código podem se tornar código morto. Em um nível mais funcional, isso pode ser visto como introdução artificial de efeitos colaterais inofensivos / úteis e redução da redundância do código, mas também pode ser usado até o nível de opcode para permitir o uso de instruções mais curtas , que não seria possível ao dobrar sequências de código sem a introdução combinada de efeitos colaterais causados ​​pelo código morto.

Veja também

Referências

links externos