Co to znaczy inline’ować funkcję i jak to wpływa na program?

Odpowiedź

Funkcja inline to taka, dla której kompilator kopiuje kod z definicji funkcji bezpośrednio do kodu funkcji wywołującej, zamiast tworzyć oddzielny zestaw instrukcji w pamięci. Eliminuje to narzut wywoływania i może ujawnić znaczące możliwości optymalizacji. Użycie specyfikatora „inline” jest tylko sugestią dla kompilatora, że można wykonać rozszerzenie inline; kompilator może swobodnie zignorować tę sugestię.
Niektóre z efektów inliningu są następujące:

  1. W większości przypadków inlining zwiększa rozmiar programu. Ale w niektórych przypadkach, gdy rozmiar funkcji jest mniejszy niż rozmiar kodu wywołania funkcji, inlining może zmniejszyć rozmiar programu.
  2. W większości przypadków, inlining może poprawić czas wykonania poprzez uniknięcie narzutu wywołania, i możliwe see-through przez optymalizator (czyniąc go nie-oczywistym funkcji) dla więcej możliwości optymalizacji. Jednakże, jeśli funkcja nie jest często wywoływana, nie będzie miała widocznej poprawy czasu wykonania.
  3. Inlining zwiększa praktyczne sprzężenie, sprawiając, że dzwoniący potencjalnie polega na wewnętrznych szczegółach implementacji inlined kodu. Problem z praktycznym sprzężeniem polega na tym, że gdy zmienia się inlined callee, musisz ponownie skompilować dzwoniącego. Jest to koszt budowy i czasu rozwoju.

Najlepszym podejściem byłoby wstrzymanie się z inliningiem, dopóki nie skończysz profilowania swojego programu. Pomoże to określić, czy uzyskasz jakiekolwiek dodatkowe korzyści z inliningu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.