Pok-13-wyk-Slajd27
Rozwijanie funkcji
Do bardziej zaawansowanych optymalizacji należy rozwijanie funkcji w linii wywołania, czyli – w pewnym sensie – traktowanie ich jak makra.
W przedstawionym przykładzie funkcja języka C zamieniająca dwa elementy całkowite może w ogóle nie być implementowana jako funkcja tylko zastąpiona trzema rozkazami kodu maszynowego.
Zyskujemy na pewno na wydajności, a najprawdopodobniej również na rozmiarze kodu. Na wydajności – ponieważ unikamy przygotowywania parametrów, wywołania i powrotu z podprogramu. Na rozmiarze – ponieważ kod służący do przygotowania parametrów i wywołania funkcji raczej nie byłby mniejszy niż sekwencja trzech instrukcji kodu maszynowego.
W ogólnym przypadku oczywiście mamy tu do czynienia z poszukiwaniem kompromisu pomiędzy zyskiem prędkości wynikającym z nie wywoływania funkcji, a wzrostem rozmiaru programu wskutek wstawienia implementacji funkcji w miejsce jej wywołania.