Antwoord
Een inline-functie is een functie waarvoor de compiler de code van de functiedefinitie direct in de code van de aanroepende functie kopieert, in plaats van een aparte set instructies in het geheugen aan te maken. Dit elimineert aanroep-linkage overhead en kan significante optimalisatie mogelijkheden bieden. Het gebruik van de “inline” specifier is slechts een suggestie aan de compiler dat een inline uitbreiding kan worden uitgevoerd; de compiler is vrij om de suggestie te negeren.
Enkele van de effecten van inlinen zijn:
- In de meeste gevallen vergroot inlinen de programmagrootte. Maar in sommige gevallen, wanneer de grootte van de functie kleiner is dan de grootte van de functie-aanroepcode, kan inlining de programmagrootte verkleinen.
- In de meeste gevallen kan inlining de uitvoeringstijd verbeteren door de overhead van de aanroep te vermijden, en mogelijk door de optimizer te doorzien (waardoor het een niet-opake functie wordt) voor meer optimalisatiemogelijkheden. Echter, als de functie niet vaak wordt aangeroepen, zal het geen zichtbare runtime verbetering opleveren.
- Inlining verhoogt de praktische koppeling door de aanroeper mogelijk te laten vertrouwen op de interne implementatiedetails van de ingelinte code. Het probleem met praktische koppeling is dat wanneer de geïnlinieerde calllee verandert, je de caller opnieuw moet compileren. Dit kost bouw- en ontwikkelingstijd.
De beste aanpak zou zijn om te wachten met inlinen totdat je klaar bent met het profilen van je programma. Dit zal helpen bepalen of je extra voordelen krijgt van inlining.