Referenzparameter?



  • Hallo!
    Ich habe mir sagen lassen, dass - wenn ich einen std::string an eine Funktion übergebe - ich Referenzparameter in Funktionen verwenden sollte, da das Kopieren von strings ja vergleichsweise lange dauert und bei Referenzen ja wegfällt.

    In einem Algorithmus habe ich nun folgende Funktion verwendet

    bool funktion(int x, int y)
    

    Diese Funktion wird im Laufe des Algorithmus' häufig aufgerufen. Der Algorithmus läuft insgesamt ca. 14,9 sek.
    Wenn ich aber nun

    bool funktion(int& x, int& y)
    

    verwende, braucht der Algorithmus auf einmal 17sek.

    Wieso sind bei int-Werten "normale" Funktionsparameter schneller als Referenzen? Müsste bei Referenzen nicht der Kopiervorgang umgangen werden und der Alogrithmus so schneller laufen?

    Anmerkung: x und y werden durch die Funktion nicht geändert.



  • Kopiert muss immer etwas werden. Und das sind bei einem string von einer Länge von 1000 lediglich 4 Byten (die Referenz halt) und bei einem Integer, der selbst auch 4 Bytes hat sparst du dir nichts. Im Gegenteil es kann, wie du schon sagst längsämer sein..



  • drakon schrieb:

    Im Gegenteil es kann, wie du schon sagst längsämer sein..

    Was daran liegen kann, dass die Referenz innerhalb der Funktion dereferenziert wird, was natürlich auch Zeit braucht.

    Je nach Compiler ist es auch möglich, dass so etwas rausoptimiert wird. Aber besser, man verlässt sich nicht drauf. Als Grundsatz kann man sich merken, komplexere Typen wie Klassen als Const-Referenz zu übergeben (wenn sie nicht verändert werden) und kleinere, eingebaute Typen als Kopie.


Anmelden zum Antworten