Pok-13-wyk-Slajd16
Optymalizacja kodu
Dalszą poprawę wydajności wygenerowanego kodu można uzyskać w wyniku procesu optymalizacji kodu (który ściśle rzecz biorąc powinien być nazywany procesem ulepszania kodu). Granice między efektywnym generowaniem kodu wynikowego, a jego optymalizacją trudno jest precyzyjnie określić.
Celem optymalizacji jest obecnie najczęściej uzyskanie szybszego kodu. Optymalizacje w kierunku redukcji rozmiaru kodu stosujemy zazwyczaj w przypadku, gdy maszyną docelową jest system wbudowany o ograniczonym, niewielkim rozmiarze pamięci.
Przekształcenia optymalizujące mają różny charakter, niektóre poprawiają prędkość i redukują rozmiar kodu, niektóre poprawiają jeden z tych parametrów nie pogarszając drugiego, inne poprawiają jeden parametr kosztem drugiego.
Transformacje optymalizujące muszą zachować semantykę programu – program przed i po optymalizacji musi dawać takie same rezultaty. Wymaganie to dotyczy tylko całkowicie poprawnych programów. Czasami zdarza się, że program przed i po optymalizacji daje różne rezultaty, rzadko wynika to jednak z błędu w optymalizatorze, częściej z błędów w programie – użycia niezainicjalizowanych zmiennych, błędnych odwołań z użyciem wskaźników itp.
Optymalizacja jest procesem kosztownym. Zaimplementowanie dobrego optymalizatora jest trudne. W trakcie procesu optymalizacji kodu wykonywana jest czasochłonna analiza przepływu danych i przepływu sterowania. Efekty optymalizacji muszą być więc warte włożonego wysiłku (jest to jednak bardzo elastyczne kryterium, zwłaszcza w systemach, od których działania zależy życie ludzkie).