Heim  >  Artikel  >  Backend-Entwicklung  >  Willst du Geschwindigkeit? Wertübergabe: Ist Copy Elision immer der Leistungssieger?

Willst du Geschwindigkeit? Wertübergabe: Ist Copy Elision immer der Leistungssieger?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 11:59:03949Durchsuche

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

Willst du Geschwindigkeit? Wertübergabe: Überlegungen zur Leistung

Das Prinzip „Geschwindigkeit wünschen? Betrachten Sie zur Veranschaulichung den folgenden Code mit den Klassen X und 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>

Hier gibt foo() eine temporäre Zeichenfolge zurück, die sowohl an X- als auch an Y-Konstruktoren übergeben wird. Wenn X mem_name initialisiert, ruft es den Verschiebungskonstruktor von std::string auf, der möglicherweise das Kopieren des Strings vermeidet. Wenn Y jedoch mem_name initialisiert, muss es die Zeichenfolgenreferenz kopieren.

L-Wert vs. R-Wert-Argumente:

Wenn ein L-Wert (nicht temporär) übergeben wird, werden sowohl X und Y führt eine Kopie durch. Zusätzlich führt X einen Zug aus. Bei R-Werten (temporären Werten) darf ein Zeiger (entspricht der Übergabe als Referenz). Daher weist X eine ähnliche Leistung wie Y für l-Werte und eine bessere Leistung für r-Werte auf.

Achtung:

Während „Willst du Geschwindigkeit? Pass by Value“ eine überzeugende Idee ist, es sollte mit Bedacht angewendet werden. Es ist wichtig, den spezifischen Kontext und den potenziellen Mehraufwand zu berücksichtigen, der mit dem Kopieren großer Datenstrukturen verbunden ist. Zur Ermittlung der tatsächlichen Auswirkungen auf die Leistung wird eine Profilierung empfohlen.

Zusätzliche Ressourcen:

[Scott Meyers GN13 Talk](https://www.youtube.com /watch?v=uk3-zmJWt-E) (Zeitrahmen 8:10 und 8:56)

[juanchopanzas Blog: „Willst du Geschwindigkeit? Don't (Always) Pass By Value“]

Das obige ist der detaillierte Inhalt vonWillst du Geschwindigkeit? Wertübergabe: Ist Copy Elision immer der Leistungssieger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn