Siro
15.01.2016, 11:13
Hallo zusammen, zum Wochenende eine kleine Frage:
Ich wollte meiner Software etwas unter die Arme greifen und unnötige Funktionsaufrufe vermeiden.
Also ein Speedup sozusagen.
Nun dachte ich (sollte man nicht, weis ich;)) durch das Schlüsselwort "inline" wird der Funktionscode
jeweils direkt eingesetzt ohne Funktionsaufruf. Das macht den Code zwar größer aber call und return entfallen.
Nun lese ich grad Folgendes und muss feststellen das ich durch inline NICHT unbedingt zum gewünschten Ziel komme :(
Quelle: https://de.wikibooks.org/wiki/C-Programmierung:_Funktionen#Inline-Funktionen
a) Eine Funktion, die als inline definiert ist, soll gemäß dem C-Standard so schnell wie möglich aufgerufen werden.
b) Die genaue Umsetzung ist der Implementierung überlassen.
c) Beispielsweise kann der Funktionsaufruf dadurch beschleunigt werden, dass die Funktion nicht mehr als eigenständiger Code vorliegt,
sondern an der Stelle des Funktionsaufrufs eingefügt wird.
Dadurch entfällt eine Sprunganweisung in die Funktion und wieder zurück.
d) Allerdings muss der Compiler das Schlüsselwort inline nicht beachten,
wenn der Compiler keinen Optimierungsbedarf feststellt.
f) Viele Compiler ignorieren deshalb dieses Schlüsselwort vollständig und setzen auf Heuristiken, wann eine Funktion inline sein sollte.
zu a) eigentlich soll die Funktion garnicht aufgerufen werden, sondern der Code direkt eingefügt werden.
zu b) verstehe ich nicht, die Implementierung ist doch mein code ?
zu c) genau das möchte ich
zu d) UPPS, das soll er aber unbedingt beachten, unabhängig von der Optimierungsstufe
zu f) damit ist inline für mich unsinnig geworden
Gibt es einen Zwangs-Paramter(Schlüsselwort), dass der Code "unbedingt" ohne Aufruf in den Code eingetragen wird ?
Ich danke Euch schonmal für Informationen
Siro
- - - Aktualisiert - - -
Habe noch etwas weiter gesucht und folgendes gefunden:
Inline Methoden
In der klassenorientierten Programmierung kommt es häufig vor, dass eine Methode nur aus einer einzigen Anweisung besteht. Dies geschieht besonders oft bei sogenannten Gettern. Hierbei ist der Aufwand, die Funktion zu rufen aufwendiger als das, was die Funktion eigentlich leistet.
In dem Fall kann man dem Compiler empfehlen, den Funktionsaufruf wegzulassen und die wenigen Anweisungen direkt da auszuführen, wo eigentlich die Funktion gerufen werden soll.
Eine inline-Funktion wird also überall da eingesetzt, wo eigentlich die Funktion gerufen werden sollte.
Also ist inline nur eine Compiler Empfehlung. Man kann es nicht direkt steuern :(
Ich wollte meiner Software etwas unter die Arme greifen und unnötige Funktionsaufrufe vermeiden.
Also ein Speedup sozusagen.
Nun dachte ich (sollte man nicht, weis ich;)) durch das Schlüsselwort "inline" wird der Funktionscode
jeweils direkt eingesetzt ohne Funktionsaufruf. Das macht den Code zwar größer aber call und return entfallen.
Nun lese ich grad Folgendes und muss feststellen das ich durch inline NICHT unbedingt zum gewünschten Ziel komme :(
Quelle: https://de.wikibooks.org/wiki/C-Programmierung:_Funktionen#Inline-Funktionen
a) Eine Funktion, die als inline definiert ist, soll gemäß dem C-Standard so schnell wie möglich aufgerufen werden.
b) Die genaue Umsetzung ist der Implementierung überlassen.
c) Beispielsweise kann der Funktionsaufruf dadurch beschleunigt werden, dass die Funktion nicht mehr als eigenständiger Code vorliegt,
sondern an der Stelle des Funktionsaufrufs eingefügt wird.
Dadurch entfällt eine Sprunganweisung in die Funktion und wieder zurück.
d) Allerdings muss der Compiler das Schlüsselwort inline nicht beachten,
wenn der Compiler keinen Optimierungsbedarf feststellt.
f) Viele Compiler ignorieren deshalb dieses Schlüsselwort vollständig und setzen auf Heuristiken, wann eine Funktion inline sein sollte.
zu a) eigentlich soll die Funktion garnicht aufgerufen werden, sondern der Code direkt eingefügt werden.
zu b) verstehe ich nicht, die Implementierung ist doch mein code ?
zu c) genau das möchte ich
zu d) UPPS, das soll er aber unbedingt beachten, unabhängig von der Optimierungsstufe
zu f) damit ist inline für mich unsinnig geworden
Gibt es einen Zwangs-Paramter(Schlüsselwort), dass der Code "unbedingt" ohne Aufruf in den Code eingetragen wird ?
Ich danke Euch schonmal für Informationen
Siro
- - - Aktualisiert - - -
Habe noch etwas weiter gesucht und folgendes gefunden:
Inline Methoden
In der klassenorientierten Programmierung kommt es häufig vor, dass eine Methode nur aus einer einzigen Anweisung besteht. Dies geschieht besonders oft bei sogenannten Gettern. Hierbei ist der Aufwand, die Funktion zu rufen aufwendiger als das, was die Funktion eigentlich leistet.
In dem Fall kann man dem Compiler empfehlen, den Funktionsaufruf wegzulassen und die wenigen Anweisungen direkt da auszuführen, wo eigentlich die Funktion gerufen werden soll.
Eine inline-Funktion wird also überall da eingesetzt, wo eigentlich die Funktion gerufen werden sollte.
Also ist inline nur eine Compiler Empfehlung. Man kann es nicht direkt steuern :(