Forum: Compiler & IDEs function calling by reference oder by value


von Daniel Bayer (Gast)


Lesenswert?

Hi Leute,

Was bringt den effektiveren, d.h. schnelleren und kleineren
Assemblercode?
Wenn die Variable einer Funktion by Value oder by Reference übergeben
wird.

thx
Daniel

von Matthias (Gast)


Lesenswert?

Hi

kommt drauf an. Ein char wird byValue übergeben sicher effektiver sein
als byReference. Bei einer Struktur mit 20 long's siehts dann aber
ganz anders aus.

Matthias

von Daniel Bayer (Gast)


Lesenswert?

Wieso ist das schneller wenn man einen char Wert byValue übergibt?
Er muss doch den Wert kopieren und wenn ich eine const & mach, dann
kann er doch gleich direkt auf den Wert im Register zugreifen?

von Matthias (Gast)


Lesenswert?

Hi

die Adresse muß aber übergeben werden. Die aufgerufene Funktion muß ja
schließlich wissen wo der Wert steht.

Matthias

von Daniel Bayer (Gast)


Lesenswert?

Stimmt natürlich auch wieder.
Aber was ist der Unterschied im Assemblercode ob er die Adresse
übergibt oder den Wert. Wie übergibt er die Variablen bzw. die
Adresse?
Bei meinen Funktionen leigen die Werte normalerweise schon in den
Rgistern zur Verfügung. Verwendet er die dann nicht gleich oder lädt er
sich die Werte neu?

thx
Daniel

von Matthias (Gast)


Lesenswert?

Hi

Beim AVR:
Wird eine Adresse übergeben müssen 16Bit übergeben werden und der
Zugriff erfolgt dann über indirekte Adressierung (ld) über das x,y oder
z-Register. Das kostet alles ein bischen Zeit.

Aber wenns dich näher interessiert: Man kann den GCC dazu veranlassen
ein Assembler-Listing auszugeben. Da kannst du dann genau
nachvollziehen was der Compiler macht.

Matthias

von Daniel Bayer (Gast)


Lesenswert?

Hi

In meinem Fall geht es um den AVR, gut getroffen.
Gut das mit der Adressierung (byReference) ist klar, aber was
geschieht, wenn der Wert byValue übergeben wird, also eine Kopie
angelegt wird.
Dann muss ich ja die Variable auch aus dem RAM kopieren und in einem
Register ablegen.

Verwende den IAR Compiler und nicht den GCC.

von Matthias (Gast)


Lesenswert?

Hi

der kann sicher auch ein ASM-Listing ausgeben. Schau nach, dann weißt
du wie der Compiler das macht. Alles andere wäre Spekulation. Das darf
jeder Compiler anders machen sofern die Funktion, wie sie im C-Standard
gegeben ist, erfüllt wird.

Matthias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.