Considérez ces deux implémentations d'une fonction:arguments de fonction à l'aide directe vs Création de variables locales
double MyFoo::foo(std::vector<double> & v){
double f1 = v.at(1);
double f2 = v.at(2);
double f3 = v.at(3);
double f4 = v.at(4);
double f5 = v.at(5);
double f6 = v.at(6);
double ret = sin(f1)+ sin(f2)+ sin(f3)+ sin(f4)+ sin(f5)+ sin(f6)+ sin(f7);
return ret;
}
et
double MyFoo::foo(std::vector<double> & v){
double ret = sin(v.at(1))+ sin(v.at(2))+ sin(v.at(3))+ sin(v.at(4))+ sin(v.at(5))+ sin(v.at(6))+ sin(v.at(7));
return ret;
}
Est-ce qu'il ya une différence notable (le cas échéant) le temps d'exécution de ces les fonctions? Est-ce que ces assignations de variables locales introduisent un surcoût de calcul ou les compilateurs traitent les variables locales inutiles?
P.S. Le choix de sin()
est complètement arbitraire. Ma question est centrée sur les variables locales et non sur les opérations qui se déroulent à l'intérieur.
Un bon compilateur/optimiseur entraînerait l'assemblage identique pour les deux scénarios. Je crois que le rationnel derrière l'optimisation serait que la valeur de la variable locale ne change pas. Comme l'a déclaré @Mats Persson, il s'agit au mieux d'une optimisation marginale, pour des valeurs aussi simples que des doubles, mais elle pourrait être significative pour des types de données plus gourmands en mémoire. – ChrisCM