Forum: Compiler & IDEs Inline Funktionsdeklaration warum und wann


von Volker Endres (Gast)


Lesenswert?

Hallo Forum,
kann mir jemand bitte erklärren, für was die inline Deklartion bei
Funktionen wichtig ist und wann ich diese einzusetzen habe.

Vielen Dank Volker

von Hubert (Gast)


Lesenswert?

Inlinefunktionen werden immer direkt, ohne Sprünge vom Comiler in den
Assembler/Maschinen Code geschrieben. Sie sollen dann eingestzt werden,
wenn es um zeitkritische Operationen geht.

von Volker Endres (Gast)


Lesenswert?

Hallo Hubert,
danke für die schnelle Antwort, aber wann weiß ich ob meine Funktion
zeitkritisch ist oder nicht.
wenn ich jetzt erstmal die funktion ganz normal schreibe ohne inline
und nur feststelle es geht nichts wie soll ich dann auf die Idee kommen
halt ich muß ja inline verwenden.

Danke für eine Antwort und Gruß Volker

von Hubert (Gast)


Lesenswert?

Du darfts nicht vergessen, das eine Inline-Funktion direkt geschrieben
wird, d.h. sie wird nicht kopiert, braucht also mehr Platz im
Programmspeicher.
Was zeitkritisch ist, mußt du von Fall zu Fall unterscheiden. Eine
Funktion die schnell etwas darstellen soll (Windows-like, z.B.
Draw-Funktionen) würde ich inline machen.
Wenn Du ein Programm neu schreibst brauchst Du zunächst keine Inlines.
Aber zwecks Optimierung sollte man sich schon Gedanken machen.
Mit viel Erfahrung wählst du dann inline oder nicht inline.
Und programmierung ist halt viel Erfahrung.

von Chris (Gast)


Lesenswert?

Ich habe gerade das Problem, dass das Prog ohne inline nicht richtig
abläuft, also er (der Controller) aus manchen Funktionen nichtmehr
"rauskommt". Wenn ich jede Fkt. inline deklariere, funktioniert es
zwar, aber dann ist der Speicher viel zu schnell voll. Was kann ich da
machen?

von OldBug (Gast)


Lesenswert?

Ohne Codebeispiel schwer zu sagen...

von Jörg Wunsch (Gast)


Lesenswert?

Klingt meist nach kaputtem Stack.

von Chris (Gast)


Lesenswert?

Crossposts sind immer noch nicht gern gesehen:
http://www.roboternetz.de/phpBB2/viewtopic.php?t=9817

Dort wurde das Problem bereits gelöst. Unterlass bitte das
Crossposting, poste aber wenigstens, wenn du das Problem lösen
konntest.

von Chris (Gast)


Lesenswert?

Du hast vollkommen recht, was auch immer "crossposts" sind. Das Post
auf Roboternetz.de war auch von mir. Habe halt das gute alte
Breitschwert ausgepackt ohne hinterher zu wissen, wo ich zugeschlagen
habe. Woher kann ich denn auch wissen, dass alles so stark miteinander
verwoben ist, dass es hier Leute gibt, die verschiedene Foren (und die
Posts darin) miteinander vergleichen und aufeinander abstimmen.

Aber ja, das Problem ist gelöst: ich hab falsch compiliert. Nämlich
statt für den verbauten ATmega8 für den ATmega32.

von Matthias (Gast)


Lesenswert?

Hi

nur um das ursprüngliche Thema nochmal aufzugreifen:
Inline sollte man nicht grundsätzlich bei zeitkritischen Funktionen
eingesetzt werden. Inline-Funktionen sind eher da geeignet wo das
Verhältnis aus Funktionsaufruf und eigentlichem Funktionsrumpf schlecht
ist. Typisches Beispiel sind getter/setter-Methoden einer Klasse. Dort
benötigt der Funktionsaufruf soviel mehr Laufzeit als die eigentliche
Funktion das sich der Aufruf einfach nicht lohnt.

Eine Draw-Methode würde ich grade nicht inline machen da sie reichlich
komplex seion dürfte was den Code aufbläht und an der Laufzeit fast
nichts ändert da der eigentliche Rumpf ein Vielfaches der Laufzeit des
Aufrufes benötigt.

Matthias

von Chris (Gast)


Lesenswert?

> Du hast vollkommen recht, was auch immer "crossposts" sind.

Als Crossposts werden identische (oder sehr ähnliche und zeitnahe)
Posts in verschiedene Foren bezeichnet. Crossposts sind eigentlich in
keinem Forum gern gesehen.
http://www.lugbz.org/documents/smart-questions_de.html#forum

von Andreas Siebel (Gast)


Lesenswert?

Um Code zu sparen deklariere ich "init" Funktionen auch inline, da sie
eh nur einmal aufgerufen werden.

von Hubert (Gast)


Lesenswert?

Und wie kommst Du auf die Idee, daß das Code sparen soll?

von Jörg Wunsch (Gast)


Lesenswert?

Einen [R]CALL und ein RET. ;-)

von Andreas Siebel (Gast)


Lesenswert?

GENAU ;)

Nicht viel aber immerhin. Wenn du noch Variablen bei der Initfunktion
übergibts können es auch ein paar bytes mehr werden.

von Hubert (Gast)


Lesenswert?

Ok, wieder etwas dazu gelernt.

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
Noch kein Account? Hier anmelden.