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
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
> 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.
Ahhh okay das klingt logisch. Dann werd ich mal versuchen herauszufinden wie das bei einem ATMEGA ist.
Gast
#1381546
Oftmals spart das sogar Zeit. Einfach deshalb weil die Optimierung des Compilers mit kleinen Programmstücken besser klarkommt.
Gast
#1381554
> 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
Achwas, das freut mich, ich lagere nämlich gerne alles in Funktionen aus ;-)) Ist einfach übersichtlicher und auch nachträglich besser lesbar.
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.
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.