2017-10-19 16 views
0

Je suis intéressé, lequel de ces formes de l'expression de test de boucle for est plus juste (du point de la performance et la bonne pratique de code):Opération mathématique dans l'expression de test de la boucle `for` - perfomance, optimisation

for(i = 0; i < size - 1; i++) { 
    do something 
} 

ou

int decreased_size = size - 1; 
for(i = 0; i < decreased_size; i++) { 
    do something 
} 

est l'expression de test size - 1 calculé chaque fois que dans le premier exemple ou le compilateur d'optimiser à la valeur constante, donc il n'y a pas besoin de créer unevariable supplémentaire?

Je créais une variable supplémentaire tout le temps, mais maintenant, en regardant les autres solutions sur le Codeforces, je doute - que ce soit logique?

compilateur: GCC 5.4.0 Version 20160609

+0

Cela dépend si le compilateur peut déterminer avec 100% de certitude que 'size' ne peut pas changer dans la boucle. Mais généralement, ce var supplémentaire est un gaspillage de frappe. – Mat

+4

Construire un fichier exécutable optimisé. Vérifiez le code machine généré. C'est la seule façon de voir ce que le compilateur va faire. –

+2

3ème choix: 'pour (i = 0; i + 1 chux

Répondre

2

Personne ne fait plus de sens que d'autres. En effet, avec optimisation, il produit le même code: https://godbolt.org/g/vzVJVF

Deuxièmement, le temps consommé par size-1 est, dans la plupart des cas, négligeable face au temps consommé par l'action en boucle, donc optimiser cette partie a un effet très faible sur le système. En conclusion, optimisez seulement quand c'est nécessaire (ainsi vous voyez qu'il y a un problème de temps/mémoire). Dans chaque jour, préférez un code lisible et facile à comprendre.

+0

Vous n'avez pas changé la partie 'size - 1' en' reduced_size' dans la seconde 'for (int i = 0; i MiniMax

+1

Version corrigée: https://godbolt.org/g/vzVJVF – MiniMax

+0

@MiniMax merci beaucoup – Garf365