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
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
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?
Hi die Adresse muß aber übergeben werden. Die aufgerufene Funktion muß ja schließlich wissen wo der Wert steht. Matthias
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.