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:
- 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.
- 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.
- 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.