„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wertübergabe oder Referenz: Wann ist „Geschwindigkeit gewünscht? Wertübergabe“ tatsächlich wahr?

Wertübergabe oder Referenz: Wann ist „Geschwindigkeit gewünscht? Wertübergabe“ tatsächlich wahr?

Veröffentlicht am 08.11.2024
Durchsuche:831

  Passing by Value or Reference: When is \

„Wollen Sie Geschwindigkeit? Passen Sie auf den Wert“ – Untersuchung der Auswirkungen auf die Leistung

Scott Meyers' Aussage „Wollen Sie Geschwindigkeit? Passen Sie auf den Wert auf“ wirft Fragen auf über die Leistungsvorteile der Übergabe von Objekten nach Wert statt nach Referenz. In diesem Zusammenhang beinhaltet die Übergabe als Wert einen Kopiervorgang, während die Übergabe als Referenz unnötige Kopien vermeidet.

Betrachten Sie das folgende Beispiel mit den Strukturen X und 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) {}
};

Im Konstruktor von X wird der Argumentname in ein temporäres Objekt kopiert, bevor der Verschiebungskonstruktor auf std::string aufgerufen wird, um mem_name zu initialisieren. Im Konstruktor von Y ist der Argumentname eine konstante Referenz, es wird jedoch trotzdem eine Kopie erstellt, um mem_name zu initialisieren. Deshalb führt das Potenzial für Optimierungen, wie z. B. Return Value Optimization (RVO). Eine genauere Betrachtung zeigt jedoch, dass das Ergebnis von der Art des übergebenen Arguments abhängt (L-Wert oder R-Wert):

    Lvalues
  • : Sowohl X als auch Y führen eine Kopie durch (in X beim Initialisieren von Name, in Y beim Initialisieren von Mem_Name), gefolgt von einer Verschiebungsoperation in X.
  • Rvalues
  • : eine Kopie.
  • Im Allgemeinen ist eine Verschiebung schneller als die Übergabe eines Zeigers, was im Wesentlichen das ist, was die Übergabe als Referenz bewirkt. Daher ist die Leistung von X für R-Werte besser als die von Y, während die Leistung für L-Werte ähnlich ist.

Es ist wichtig zu beachten, dass dies keine universelle Regel ist und Optimierungen je nach Compiler und Plattform variieren können. Um im Einzelfall die optimale Vorgehensweise zu ermitteln, empfiehlt sich eine Profilierung.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3