www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie lange dauert ein Funktionsaufruf?


Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich frage mich gerade, wieviel Takte ich "verbrate" wenn ich ein Stück 
QuellCode nur der Übersicht halber in Funktionen auslagere? Weis das 
jemand?

Ist es in C möglich eine Funktion inline zu deklarieren, sodass die 
Funktion also eigentlich gar keine ist sonder der Compiler den Funktions 
Code an die entsprechenden Stellen einfach einfügt?

Autor: Quentchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Tat braucht ein Funktionsaufruf Zeit. Wieviel muss man im 
Assemblerlisting nachschauen. Hängt vom Prozessor und anderen Faktoren 
ab.

Das ist immer ein Tradeoff zwischen Code-Grösse und Ausführungszeit.
"inline" ist ja mittlerweile ein Schlüsselwort in C als type modifier. 
Das kannst Du (nur) auf Funktionen anwenden.

Ob sich das lohnt kann Dir nur ein profiling sagen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich frage mich gerade, wieviel Takte ich "verbrate" wenn ich ein Stück
> QuellCode nur der Übersicht halber in Funktionen auslagere? Weis das
> jemand?
nein das weiss niemand, weil es jedesmal anders ist. Der eigentliche 
Funktionsaufruf dauert bloss 2Takte (glaube ich) aber dazu kommt noch 
der Variable Teil. Jedes Register was in der funktion verwendet wird 
muss auf dem Stack gesichert werden, die Funktionsparameter werden auf 
dem STack übergeben usw.

man kann es nicht pauschal sagen.

Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahhh okay das klingt logisch. Dann werd ich mal versuchen herauszufinden 
wie das bei einem ATMEGA ist.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oftmals spart das sogar Zeit. Einfach deshalb weil die Optimierung des 
Compilers mit kleinen Programmstücken besser klarkommt.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Oftmals spart das sogar Zeit. Einfach deshalb weil die Optimierung des
> Compilers mit kleinen Programmstücken besser klarkommt.
hast du dafür einen Link wo man das nachlesen kann? Normalerweise sollte 
sich grosse blöcke besser optimeren lassen weil da mehr spielraum 
vorhanden ist.

a = b + 1
lässt sich nicht optimieren


a = b + 1
a = a * 2
a = a - 2
lässt sich schon besser optimieren
 a = b * 2

Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achwas, das freut mich, ich lagere nämlich gerne alles in Funktionen aus 
;-)) Ist einfach übersichtlicher und auch nachträglich besser lesbar.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
D. Berg schrieb:

> Ich frage mich gerade, wieviel Takte ich "verbrate" wenn ich ein Stück
> QuellCode nur der Übersicht halber in Funktionen auslagere? Weis das
> jemand?

Im Idealfall ist das gratis. Denn wenn du Code wie beschrieben in eine 
nur an einer einzigen Stelle verwendete Funktion auslagerst und diese 
Funktion konsequenterweise als "static" deklarierst, dann wird zumindest 
GCC diesen ausgelagerten Code bei der Codeerzeugung gleich wieder 
einlagern und garkeine separate Funktion erzeugen.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manchmal lässt sich Code durch (ggf. erzwungenes) Auslagern sogar 
beschleunigen. Nämlich dann wenn es sich dabei um einen Codezweig 
handelt, der viele Resourcen (Register,Stack) belegt aber nur selten 
beansprucht wird. Dann kann es sein, dass der Wasserkopf der 
Hauptfunktion durch die Auslagerung deutlich reduziert wird.

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.