Optimisation de la valeur de retour par rapport au déplacement explicite dans C 11 : lequel utiliser ?
Dans C 11, les développeurs ont la possibilité d'améliorer les performances grâce à deux techniques : l'optimisation de la valeur de retour (RVO) et les opérations de déplacement explicites à l'aide de std::move. Lors de la détermination de l'approche à utiliser, il est essentiel de comprendre les différences et leur applicabilité respective.
Optimisation de la valeur de retour (RVO)
RVO est une technique d'optimisation mise en œuvre par le compilateur qui élimine les opérations de copie inutiles. Lorsque l'instruction return d'une fonction implique un objet dont la durée de vie se termine immédiatement après l'exécution de la fonction, le compilateur peut optimiser la copie en renvoyant directement la valeur de l'objet, évitant ainsi sa construction et sa destruction.
Déplacement explicite Opération
Une opération de déplacement explicite utilisant std::move force le compilateur à déplacer la propriété d'un objet au lieu de le copier. Ceci est réalisé en passant l'objet comme référence rvalue, puis en appelant std::move sur sa valeur de retour.
Quelle approche utiliser ?
Lors de la sélection entre RVO et explicite, donnez toujours la priorité à l’utilisation du RVO. L'élision de copie est une optimisation du compilateur très efficace qui peut améliorer considérablement les performances.
Comme démontré dans l'extrait de code fourni, la fonction read peut renvoyer un SerialBuffer en utilisant RVO :
SerialBuffer read(size_t size) const { SerialBuffer buffer(size); read(begin(buffer), end(buffer)); return buffer; }
Par défaut, le compilateur optimisera l'opération de retour, éliminant le besoin de copie si possible.
Les opérations de déplacement explicites ne doivent être utilisées que lorsque RVO ne peut pas être appliquée. Par exemple, si la durée de vie de l'objet s'étend au-delà de l'exécution de la fonction, l'utilisation de std::move peut signaler explicitement l'intention de déplacer la propriété de l'objet. Cependant, cela devrait être un scénario rare et le RVO devrait généralement suffire.
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!