Was ist schneller: Funktion mit Referenz Rückgabe oder ohne
-
Hallo, ich frage mich gerade welche Funktion wohl schneller ist.
Meiner Meinung nach ist f_1 schneller da dort ein Befehl weniger ausgeführt werden muss und bei f_2 wird der Inhalt der Variable erst noch extra innerhalb der Funktion im EAX Register gespeichert.Oder ist f_1 vielleicht trotzdem schneller?
int& f_1 ( int & a ) { cout<<"f_1"<<endl; // Nur für Debug Zwecke return a; // Gibt die Adresse der Variable int v ( aus int main() ) zurück // mov eax,[ebp+8] ; ebp+8 = Zeigt auf Adresse von int v ( aus int main() ) } int f_2 ( int & a ) { cout<<"f_2"<<endl; // Nur für Debug Zwecke return a; // Gibt den Inhalt der Variable zurück // mov eax,[eax+8] // mov eax,[eax] ; eax = 10 }
-
meistens gibt man ja aus der Funktion nicht das raus, was man reingesteckt hat, sondern was neues und da geht ne Referenz nicht, weil das Objekt vom Stack gelöscht wird, sobald die Funktion beendet ist.
Solche Mikrooptimierungen helfen dir für gewöhnlich auch nicht weiter. Überlass das dem Compiler.greetz KN4CK3R
-
void f_3(int&) { cout << "f_3"; // debug }Ist noch schneller.
-
-
Bei einem so primitiven Datentyp wie int ist das eh mehr ein Schritt zurück...
-
DerTuner schrieb:
Hallo, ich frage mich gerade welche Funktion wohl schneller ist.
Meiner Meinung nach ist f_1 schneller da dort ein Befehl weniger ausgeführt werden muss und bei f_2 wird der Inhalt der Variable erst noch extra innerhalb der Funktion im EAX Register gespeichert.Grundsätzlich sollte f_1 schneller sein. Faktisch werden vermutlich beide gleich schnell sein, da der Zugriff auf die Variable vermutlich schon beim Laden des Befehls in die Pipe erledigt wird, bevor der echte Kern der CPU den Befehl überhaupt zu Gesicht bekommt.
-
Das ist vollkommen egal.
-
dot schrieb:
relevant: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
In dem Fall ist das nicht wirklich relevant.
@DerTuner
Theoretisch ist in diesem sinnfreien Beispiel, wenn man es isoliert betrachtet, die Variante schneller die die Referenz zurückgibt. Weil sie weniger tut (ein "load" weniger).Praktisch sollte man sich darüber keine Gedanken machen, bzw. sind Überlegungen auf dieser Ebene einfach komplett sinnfrei.