Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.12.2013, 14:32

Wann sind inline-Funktionen sinnvoll?

Hey,

ich beschäftigte mich gerade mit inline-Funktionen und bin mir nicht sicher wann ich sie einsetzen sollte. Im Buch steht das man sie verwenden sollte, wenn die Abarbeitungszeit ziemlich gering ist. Bei einer einfachen Rechnung ist die Abarbeitungszeit natürlich sehr gering aber wie ist es zum Beispiel hier:

C-/C++-Quelltext

1
2
3
4
inline Component& Entity::getComponent ( unsigned int id )
{
    return components[id];
}


Es ist zwar nur eine Zeile braucht aber trotzdem deutlich länger um abgearbeitet zu werden. Wie kann man jetzt herausfinden wann man inline-Funktionen anweden sollte und wann nicht? Und wenn es unsinning ist führt der Compiler sie dann einfach nicht aus(Also dann als normale Funktion)?

2

26.12.2013, 14:35

inline solltest du verwenden, wenn eine Funktion in mehreren Übersetzungseinheiten definiert wird. Das ist z.B. der Fall, wenn sie in einem Header definiert ist, der von mehreren .cpp-Dateien inkludiert wird – ohne inline käme es dann zu einem Linker-Fehler wegen mehrfach definiertem Symbol.

Wenn du eine Methode (umgangssprachlich Member-Funktion) im Header innerhalb der Klassen-Definition definierst, ist sie implizit inline (du musst das Schlüsselwort dort nicht explizit hinschreiben).

Mit der Abarbeitungszeit (wie es im Buch steht) hat das seit einem Jahrzehnt nichts mehr zu tun, sondern es ist ein Hinweis an den Linker, an welchem Speicherort er die Funktion ablegen und suchen soll. Bevor es globale Optimierungen gab hat inline dem Compiler Optimierungen ermöglicht, die du heute auch anders bekommst.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Krishty« (26.12.2013, 14:55)


3

26.12.2013, 15:02

Ok dann ist alles klar, danke für die schnelle Antwort :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

26.12.2013, 16:28

C-/C++-Quelltext

1
2
3
4
inline Component& Entity::getComponent ( unsigned int id )
{
    return components[id];
}


Es ist zwar nur eine Zeile braucht aber trotzdem deutlich länger um abgearbeitet zu werden.

Wie kommst du denn darauf?
Wenn der operator [] nicht gerade wahnsinnig kompliziert ist, dann ist das in Nullkommanix erledigt.

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

5

26.12.2013, 18:09

Und wenn er wahnsinnig kompliziert ist erspart inline dennoch einen unnötigen Funktions-Aufruf.
Im Prinzip bietet sich inline stets bei Einzeilern an, aber wie gesagt: Der Compiler erkennt Einzeiler & Co. auch sehr gut.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

6

26.12.2013, 18:48

Lass es den Compiler machen. Du kannst ja nichtmal wirklich sichergehen, dass wenn du inline schreibst du auch wirklich inline bekommst. Am Ende entscheider Compiler darüber, du kannst ihm lediglich nen Hinweis geben.
WIP Website: kevinheese.de

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

26.12.2013, 21:42

Die Hinweise werden aber ignoriert und nur für den Fall, den Krishty schon erwähnt hat, ist das Schlüsselwort praktisch noch relevant.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige