mikrocontroller.net

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


Autor: Daniel Bayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Bayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: Daniel Bayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Bayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.