Vous voulez de la vitesse ? Passer par valeur : considérations sur les performances
Le principe "Vous voulez de la vitesse ? Passer par valeur" suggère que la transmission d'arguments par valeur peut parfois améliorer les performances en raison de l'élision de copie. Pour illustrer, considérons le code suivant utilisant les classes X et Y :
struct X {
std::string mem_name;
X(std::string name) : mem_name(std::move(name)) {}
};
struct Y {
std::string mem_name;
Y(const std::string &name) : mem_name(name) {}
};
int main() {
X(foo());
Y(foo());
}
Ici, foo() renvoie une chaîne temporaire qui est transmise aux constructeurs X et Y. Lorsque X initialise mem_name, il invoque le constructeur de déplacement de std::string, ce qui évite potentiellement de copier la chaîne. Cependant, lorsque Y initialise mem_name, il doit copier la référence de chaîne.
Arguments Lvalue vs Rvalue :
Si une lvalue (non temporaire) est transmise, les deux X et Y effectuera une copie. De plus, X effectuera un mouvement. Pour les rvalues (temporaires), X ne peut effectuer qu'un mouvement, tandis que Y doit toujours effectuer une copie.
Implications sur les performances :
Généralement, un mouvement est plus rapide qu'une passe. un pointeur (équivalent à passer par référence). Par conséquent, X a des performances similaires à Y pour les valeurs l et de meilleures performances pour les valeurs r.
Attention :
Bien que "Vous voulez de la vitesse ? Passer par valeur" soit une idée convaincante, elle doit être appliquée judicieusement. Il est essentiel de prendre en compte le contexte spécifique et la surcharge potentielle associée à la copie de structures de données volumineuses. Le profilage est recommandé pour déterminer l'impact réel sur les performances.
Ressources supplémentaires :
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3