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; }
  1. ADoor common subexpression elimination roept g sq twee keer aan
  2. BDoor constant folding wordt g code die alleen 37 teruggeeft
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Compilers

  1. Welke uitspraak over software pipelining is juist?
  2. Waarom herordent een compiler onder strikte instellingen de optelling (a + b) + c van floating-pointgetallen niet eigenmachtig tot a + (b + c)?
  3. Welk soort instructie wordt gebruikt bij automatische vectorisatie door een compiler?
  4. Welke basisvoorwaarde moet een optimalisatie van een compiler respecteren?
  5. Welke uitspraak over instructieselectie (instruction selection), een van de fasen van codegeneratie, is juist?

Vergelijkingen bij dit onderwerp