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
1049 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!

source:php.cn
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