moumouteb
Messages postés192Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention28 février 2011
-
23 avril 2008 à 19:06
moumouteb
Messages postés192Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention28 février 2011
-
26 avril 2008 à 18:11
Bonjour.
Dans une boucle for est-il vrai que l'incrémentation ++i est préférable à i++ (ou l'inverse) car en assembler elle demande moins d'opérations?
Merci de m'éclairer sur ce mystère..
<hr size="2" width="100%" />Quand la merde vaudra de l'or les pauvres naitront sans trou du cul. Coluche.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 23 avril 2008 à 21:52
Pour revenir à la question initiale, c'est strictement identique hors contexte.
// code ici
i++;
// code ici
++i;
c'est le compilo que décidera suivant l'arbre d'optimisation obtenu s'il mettra:
inc eax
ou: add eax, 1
ou: lea eax, [eax+1]
Dans tous les cas c'est 1 cycle parallélisable que soit PRE ou POST, tout autre discours n'est que légende urbaine. Ensuite si mettre du pré ou du post ne sera dicté que par les nécessités de calcul de ton algo.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 23 avril 2008 à 19:26
Bonjour,
Il est toujours préférable d'utiliser la préincrémentation (++i) à la postincrémentation (i++). Le problème se pose quand i est une instance de classe; la postincrémentation signifie qu'une instance va être créée (pour conserver la valeur avant incrémentation) avant que l'instance i soit incrémentée et c'est l'instance créée qui est retournée (la valeur avant incrémentation ... qui ne sert à rien ici !).
Comme de toute façon la pré/postincrémentation n'a aucune signification dans une instruction du genre ++i ou i++ (ça n'a de signification que si i est utilisé avant/après l'incrémentation comme dans j ++i; ou j i++; où là il y a une vraie différence) autant toujours utiliser la préincrémentation (qui est plus lisible aussi).