Compilers

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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Compilers

  1. Welk effect van loop unrolling is juist?
  2. Welke berekening in de bovenstaande lus komt in aanmerking voor loop-invariant code motion (verplaatsing buiten de lus)? (x en y worden in de lus niet gewijzigd.)
  3. Welke transformatie is juist als in de bovenstaande lus strength reduction wordt toegepast op de indexberekening i * 4?
  4. Wat is de belangrijkste reden dat de bovenstaande lus moeilijk te vectoriseren is met SIMD-instructies?
  5. Waarom kan de compiler in de bovenstaande functie de optimalisatie waarbij het lezen van *b buiten de lus wordt gebracht niet zonder meer uitvoeren?

Vergelijkingen bij dit onderwerp