function calling by reference oder by value

Gast #76469
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
Gast #76470
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?
Gast #76472
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
Gast #76473
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
Gast #76474
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.
Gast #76475
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.