„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):
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.
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