Wie lange dauert ein Funktionsaufruf?

OP #1381519
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?
Gast #1381522
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.
Gast #1381524
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.
Gast #1381554
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
#1381560
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.
#1381566
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren