Renditewertoptimierung vs. explizite Verschiebung in C 11: Was soll verwendet werden?
In C 11 haben Entwickler die Möglichkeit, die Leistung zu verbessern durch zwei Techniken: Rückgabewertoptimierung (RVO) und explizite Verschiebungsoperationen mit std::move. Bei der Überlegung, welcher Ansatz verwendet werden soll, ist es wichtig, die Unterschiede und ihre jeweilige Anwendbarkeit zu verstehen.
Return Value Optimization (RVO)
RVO ist eine Optimierungstechnik, die von der implementiert wird Compiler, der unnötige Kopiervorgänge eliminiert. Wenn die Return-Anweisung einer Funktion ein Objekt betrifft, dessen Lebensdauer unmittelbar nach der Ausführung der Funktion endet, kann der Compiler die Kopie optimieren, indem er den Wert des Objekts direkt zurückgibt und so dessen Erstellung und Zerstörung vermeidet.
Explizite Verschiebung Operation
Eine explizite Verschiebungsoperation mit std::move zwingt den Compiler dazu, den Besitz eines Objekts zu verschieben, anstatt es zu kopieren. Dies wird erreicht, indem das Objekt als R-Wert-Referenz übergeben und dann std::move für seinen Rückgabewert aufgerufen wird.
Welcher Ansatz soll verwendet werden?
Bei der Auswahl zwischen RVO und expliziter Bewegung, priorisieren Sie immer die Verwendung von RVO. Copy-Elision ist eine äußerst effektive Compiler-Optimierung, die die Leistung erheblich verbessern kann.
Wie im bereitgestellten Code-Snippet gezeigt, kann die gelesene Funktion mithilfe von RVO einen SerialBuffer zurückgeben:
SerialBuffer read(size_t size) const { SerialBuffer buffer(size); read(begin(buffer), end(buffer)); return buffer; }
Standardmäßig Der Compiler optimiert die Rückgabeoperation und macht das Kopieren nach Möglichkeit überflüssig.
Explizite Verschiebungsoperationen sollten nur verwendet werden, wenn RVO nicht angewendet werden kann. Wenn beispielsweise die Lebensdauer des Objekts über die Ausführung der Funktion hinausgeht, kann die Verwendung von std::move explizit die Absicht signalisieren, den Besitz des Objekts zu verschieben. Dies sollte jedoch ein seltenes Szenario sein und RVO sollte im Allgemeinen ausreichen.
Das obige ist der detaillierte Inhalt vonRVO vs. expliziter Zug in C 11: Wann sollte ich welchen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!