Martwy kod - Dead code

Termin martwy kod ma wiele definicji. Niektórzy używają tego terminu w odniesieniu do kodu (tj. Instrukcji w pamięci), którego nigdy nie można wykonać w czasie wykonywania. W niektórych obszarach programowania , martwy kod jest sekcja w kodzie źródłowym programu, który jest wykonywany, ale której wynik nigdy nie jest używany w żadnym innym obliczeń. Wykonanie martwego kodu marnuje czas obliczeń i pamięć.

Chociaż wynik martwego obliczenia może nigdy nie zostać użyty, może wywołać wyjątki lub wpłynąć na jakiś stan globalny, w związku z czym usunięcie takiego kodu może zmienić wyjście programu i wprowadzić niezamierzone błędy . Optymalizacje kompilatora są zwykle konserwatywne w podejściu do usuwania martwego kodu, jeśli istnieje jakakolwiek niejednoznaczność co do tego, czy usunięcie martwego kodu wpłynie na wynik programu. Programista może w tym pomóc kompilatorowi, wykorzystując dodatkowe funkcje statyczne i / lub wbudowane oraz umożliwiając optymalizację czasu łącza .

Przykład

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

	return iX*iY;
}

W powyższym przykładzie, mimo że dzielenie iX przez iY jest obliczane i nigdy nie jest używane, zgłosi wyjątek, gdy nastąpi dzielenie przez zero. Dlatego usunięcie martwego kodu może zmienić dane wyjściowe programu.

Analiza

Eliminacja martwego kodu to forma optymalizacji kompilatora, w której martwy kod jest usuwany z programu. Analiza martwego kodu może być przeprowadzona przy użyciu analizy zmiennych na żywo , formy statycznej analizy kodu i analizy przepływu danych . Kontrastuje to z analizą nieosiągalnego kodu, która opiera się na analizie przepływu sterowania .

Technika eliminacji martwego kodu należy do tej samej klasy optymalizacji, co eliminacja nieosiągalnego kodu i eliminacja nadmiarowego kodu .

W dużych projektach programistycznych czasami trudno jest rozpoznać i wyeliminować martwy kod, szczególnie gdy całe moduły stają się martwe. Rusztowanie testowe może sprawiać wrażenie, że kod nadal działa, a czasami język umowy może wymagać dostarczenia kodu, nawet jeśli kod nie jest już odpowiedni.

Niektóre IDE (takie jak Xcode, Visual Studio 2010 i Eclipse Galileo) mają możliwość lokalizowania martwego kodu na etapie kompilacji.

Podczas gdy większość technik optymalizacji stara się usunąć martwy kod w implementacji, w ekstremalnych formach optymalizacji pod kątem rozmiaru może być czasami pożądane celowe wprowadzenie i ostrożne ukształtowanie pozornie martwego kodu, gdy pozwala to na złożenie w inny sposób niepowiązanych sekcji kodu razem (i tym samym zmniejszenie ich połączony rozmiar) tak, aby dodatkowy kod skutecznie nie zaszkodził pierwszej ścieżce wykonania przez kod, ale służył do wykonywania działań niezbędnych dla alternatywnych ścieżek wykonywania, dla których inne sekcje kodu mogą stać się martwym kodem. Na bardziej funkcjonalnym poziomie można to postrzegać zarówno jako sztuczne wprowadzanie nieszkodliwych / użytecznych efektów ubocznych, jak i redukcję nadmiarowości kodu, ale można go również używać do poziomu kodu operacyjnego, aby umożliwić użycie krótszych instrukcji , co nie byłoby możliwe przy składaniu sekwencji kodu bez wspólnego wprowadzenia efektów ubocznych spowodowanych martwym kodem.

Zobacz też

Bibliografia

Zewnętrzne linki