On peut effectivement faire confiance aux compilateurs modernes pour les optimisations. Je dis juste que, en ayant lu rapidement (en diagonale) le source je constate déjà des éléments qui montrent l'absence de compréhension du langage par son auteur.
Sinon, dans l'absolu, l'arithmétique de pointeurs, ce n'est pas pour rendre le code illisible, c'est parce qu'il en résulte une économie dans le nombre d'instructions machine.
Dans le cas d'un index (il arrive que ce soit utile d'utiliser des indexes, je ne dis pas le contraire. Juste, pas ici.):
Initialisation de l'index (i=0)
calcul du pointeur final (foo[i])
déréférencement du pointeur final (bar=foo[i])
incrémentation de l'index (i++)
Dans le cas d'un pointeur:
initialisation du pointeur (pi=&foo)
déréférencement du pointeur (bar=*pi)
incrémentation du pointeur (pi++)
Une instruction de moins, sur un pointeur, à chaque itération (sachant qu'un extrait du code donne ça: diff = std::abs(mValueFunction[nCapital][nProductivity]-mValueFunctionNew[nCapital][nProductivity]); ==> plus d'un index, et mieux, déréférencements inutiles car doublés...).
Mais bon, on peut toujours écrire du code pourri pour faire un bench, se reposer sur les optimisations du compilo (sachant qu'une optimisation de vitesse peut parfois apporter moins de perfs de vitesse qu'une optim sur l'espace mémoire, et que donc il faut savoir quelle optimisation utiliser en fonction du code...) et ensuite accuser le langage.
[^] # Re: Un code d'un langage que l'on ne connaît pas ne peut pas servir pour un bench!
Posté par freem . En réponse au journal Quand Pythran fait tourner du Python plus vite que du C++, c'est que.... Évalué à -7.
On peut effectivement faire confiance aux compilateurs modernes pour les optimisations. Je dis juste que, en ayant lu rapidement (en diagonale) le source je constate déjà des éléments qui montrent l'absence de compréhension du langage par son auteur.
Sinon, dans l'absolu, l'arithmétique de pointeurs, ce n'est pas pour rendre le code illisible, c'est parce qu'il en résulte une économie dans le nombre d'instructions machine.
Dans le cas d'un index (il arrive que ce soit utile d'utiliser des indexes, je ne dis pas le contraire. Juste, pas ici.):
Dans le cas d'un pointeur:
Une instruction de moins, sur un pointeur, à chaque itération (sachant qu'un extrait du code donne ça:
diff = std::abs(mValueFunction[nCapital][nProductivity]-mValueFunctionNew[nCapital][nProductivity]);==> plus d'un index, et mieux, déréférencements inutiles car doublés...).Mais bon, on peut toujours écrire du code pourri pour faire un bench, se reposer sur les optimisations du compilo (sachant qu'une optimisation de vitesse peut parfois apporter moins de perfs de vitesse qu'une optim sur l'espace mémoire, et que donc il faut savoir quelle optimisation utiliser en fonction du code...) et ensuite accuser le langage.