Topic : « ++i ou i++ »

Avatar de DuvaDuva DuvaDuva
si je ne dit pas de bêtise si tu fait en java:
int i = 2;
s=new Stack();
s.push(i++);
la tête de la pile vaudra 2 et i 3

mais si on fait
s.push(++i);
la tête de la pile vaudra 3 et i 3

ou alors c'est l'inverse je ne sait plus :hap:
mais il faut éviter de faire des trucs pareils, c'est dégueulasse :hap:
#765043
Avatar de Factom Factom
>>404Shoah
++i est plus rapide si on a pas besoin de récupérer l'ancienne valeur de i
La notation {} cast automatiquement dans le bon type (conversion float -> int par exemple)

Sur les compilateurs modernes il parait que non
Avatar de FUMFz FUMFz
++i peut introduire un dépendance de données dans le microcode exécuté et empêcher l'exécution parallèle du microcode.

Par exemple dans (i++ * 2) la multiplication peut être parallélisé avec l'incrémentation, pas dans (++i * 2).

Dans une boucle for ça change rien tant que l'incrémentation n'a pas lieu dans la condition d'arrêt (exemple : for(int i=-1; ++i < n ; ) génère une dépendance de donnée).

Pour gagner (un peu) en performance il est plus utile de décrémenter. La comparaison à zero est plus simple et peu sauver un registre.
#766091
Avatar de Factom Factom
>>FUMFz
++i peut introduire un dépendance de données dans le microcode exécuté et empêcher l'exécution parallèle du microcode.
Par exemple dans (i++ * 2) la multiplication peut être parallélisé avec la multiplication, pas dans (++i * 2).
Dans une boucle for ça change rien tant que l'incrémentation n'a pas lieu dans la condition d'arrêt (exemple : for(int i=-1; ++i < n ; ) génère une dépendance de donnée).
Pour gagner (un peu) en performance il est plus utile de décrémenter. La comparaison à zero est plus simple et peu sauver un registre.

Intéressant, merci :hap:
Liste des sujets