Boucles for et performance …

Bon ben une autre découverte. Pas vraiment neuve vu que j’avais déjà trouvé un article en parlant, mais je pensais vraiment pas que ça se vérifiait.

L’article parlait des boucles for et de la manière optimale de les écrire. Entre autres, il est recommandé de partir de l’élément maximal et de terminer à zéro (alors que la plupart des gens partent de zéro et termine à l’élément maximal) La raison invoquée étant que tester la différence à zéro est plus rapide que tester l’infériorité à une valeur différente de zéro … pour moi, n’importe quel test d’égalité (fut-ce <, >, <=, >=, !=, ==) prenait le même nombre de cycles du CPU … et bien non :

#define MAX 10000000

for (int i = 0; i < MAX; ++i)
// ... quelque chose à faire ici

for (int i = MAX; i != 0; --i)
// la même chose que précédemment

La deuxième boucle est plus rapide … même en mode release avec les optimisations à fond. Pas de beaucoup, mais j’ai été surpris. Du coup, autant prendre l’habitude d’utiliser la deuxième formulation.