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?
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.
> 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.
Oftmals spart das sogar Zeit. Einfach deshalb weil die Optimierung des Compilers mit kleinen Programmstücken besser klarkommt.
> 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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.