Wat is Inlining?

Optimalisatie waarbij een functieaanroep wordt vervangen door de body van de aangeroepen functie. De overhead van de aanroep vervalt en andere optimalisaties werken beter, maar de code wordt groter.

Japanse benaming: インライン展開

“Inlining” komt voor in 3 oefenvragen uit 1 onderwerpen, bijv. Compilers.

Vakgebied: Compilers

Nu oefenen: vragen over Inlining

Welke combinatie van voordeel en nadeel van het inlinen (inline expansion) van functies is juist?

  1. AVoordeel: de code wordt kleiner; nadeel: de overhead van aanroepen neemt toe
  2. BVoordeel: het compileren is sneller klaar; nadeel: het uitvoeringsresultaat verandert
  3. CVoordeel: de overhead van aanroepen verdwijnt; nadeel: de code wordt groter
Antwoord en toelichting tonen

Antwoord: C. Voordeel: de overhead van aanroepen verdwijnt; nadeel: de code wordt groter

Bij inlining wordt in plaats van een aanroep de body van de functie ingevoegd, zodat de overhead van argumentoverdracht, sprong en terugkeer verdwijnt. Een groot voordeel is bovendien dat constanten enz. van de aanroeper naar de body doorwerken, zodat constant folding en het verwijderen van dode code effect krijgen. Anderzijds ontstaat bij elke aanroep een kopie van de body, waardoor de code groter wordt en instructiecache-missers kunnen toenemen; daarom worden kleine of vaak aangeroepen functies gekozen. Als het juist wordt uitgevoerd, verandert het uitvoeringsresultaat niet.

Welke optimalisatie wordt het best mogelijk gemaakt door link-time optimization (LTO)?

  1. AInlining enz. is ook mogelijk tussen functies in afzonderlijke bestanden
  2. BAlleen lussen binnen één functie kunnen worden uitgerold
  3. CLinken is niet meer nodig en objectbestanden kunnen rechtstreeks worden uitgevoerd
Antwoord en toelichting tonen

Antwoord: A. Inlining enz. is ook mogelijk tussen functies in afzonderlijke bestanden

Bij gewoon compileren wordt elk bronbestand afzonderlijk naar machinecode omgezet, zodat de inhoud van functies in andere bestanden niet zichtbaar is en inlining of constantpropagatie over bestanden heen niet mogelijk is. Bij LTO blijft elk bestand als tussenrepresentatie bewaard en wordt tijdens het linken het hele programma gezamenlijk geoptimaliseerd. Daardoor zijn inlining over bestanden heen en het verwijderen van functies die nergens worden aangeroepen mogelijk. Het uitrollen van lussen binnen één functie kan ook bij gewoon compileren.

“Inlining” in de toelichting

Vragen met “Inlining” (3)

  1. Welke combinatie van voordeel en nadeel van het inlinen (inline expansion) van functies is juist?
  2. Welke optimalisatie wordt het best mogelijk gemaakt door link-time optimization (LTO)?
  3. Welke combinatie van een optimalisatie die na het inlinen van sq in de bovenstaande code volgt en het resultaat daarvan is juist?

Verwante termen

Constant folding Numerieke apertuur (NA) Abstracte syntaxisboom (AST) Basic block Common subexpression elimination Control-flow-graaf (CFG) Instructiescheduling Intermediaire representatie (IR) JIT-compilatie (just-in-time) Lexicale analyse

Naar de woordenlijst