Maison > développement back-end > C++ > Vous voulez de la vitesse ? Valeur transmise : Copy Elision est-il toujours le gagnant en termes de performances ?

Vous voulez de la vitesse ? Valeur transmise : Copy Elision est-il toujours le gagnant en termes de performances ?

Linda Hamilton
Libérer: 2024-10-26 11:59:03
original
1112 Les gens l'ont consulté

 Want Speed? Pass By Value: Is Copy Elision Always the Performance Winner?

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 :

<code class="cpp">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());
}</code>
Copier après la connexion

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 que la 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 :

  • [Conférence GN13 de Scott Meyer](https://www.youtube.com /watch?v=uk3-zmJWt-E) (périodes 8h10 et 8h56)
  • [Blog de juanchopanza : "Vous voulez de la vitesse ? Ne passez pas (toujours) par la valeur"]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal