Optimisation des boucles

Portrait de trax

Commençons fort !

Condition de boucle

int main() {
  int a = 42;
  int b = 72;
  int t = 0;
  for (int i = 0; i < a + b; i++) {
    t++;
  }
 
  return 0;
}

Sans optimisation de la part de gcc, le programme va effectuer 114 tour de boucle en recalculant la somme a + b à chaque tour de boucle.
En spécifiant à gcc d'optimiser ce code, la boucle va tout simple être supprimé.

Nous pouvons alors demander à gcc d'afficher le résultat. Il ne faut pas sous estimer gcc, qui aura vu que le résultat est constant et qui supprimera quand même la boucle, et affichera un résultat prés calculé.

Bis

Dans la vraie vie on fait rarement de boucles comme-ca, le resultat n'est pas constant ou voir non constant ou defois, pas de resultat :P

void faire_quelquechose(int i);
 
int main() {
  int a = 42;
  int b = 72;
  int t = 0;
  for (int i = 0, max = a + b; i < max; i++) {
    faire_quelquechose(t);
  }
 
  return 0;
}

Et la le a + b est calcule une seule fois pour plein de tour de boucle !
Et un peu plus de memoire est utilisee.

Commentaires

Portrait de donkee

La variables max n'est pas forcément utile

int main()
{
    int a = 42;
    int b = 72;
    int t = 0;
    for(int i = a + b; i > 0; i--)
         faire_quelquechose(t);
    return 0;
}