Compilers
Welke combinatie van een optimalisatie die na het inlinen van sq in de bovenstaande code volgt en het resultaat daarvan is juist?
static int sq(int v) { return v * v; }
int g(void) { return sq(6) + 1; }
- ADoor common subexpression elimination roept g sq twee keer aan
- BDoor constant folding wordt g code die alleen 37 teruggeeft
- CDoor loop unrolling wordt v * v vervangen door zes optellingen
Antwoord en toelichting tonen
Antwoord: B. Door constant folding wordt g code die alleen 37 teruggeeft
Na het inlinen van sq is de inhoud van g gelijk aan return 6 * 6 + 1;, en alle operanden van de vermenigvuldiging zijn constanten. Met constant folding volgt 6 * 6 = 36 en 36 + 1 = 37, en g wordt code die alleen 37 teruggeeft. Het grote voordeel van inlining is niet alleen het wegvallen van de aanroep-overhead, maar ook dat optimalisaties met waarden van de aanroeper mogelijk worden. Er is hier geen lus, en sq wordt niet tweemaal aangeroepen.