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

Facer

Frischling

  • »Facer« ist der Autor dieses Themas

Beiträge: 11

Wohnort: Ittersbach

Beruf: Schüler

  • Private Nachricht senden

1

31.03.2005, 01:07

Frage zu Inline

Hi in dem Buch steht die Faustregel etwas wiedersprüchlich da deshalb frag ich lieber noch mal nach.

Zuerst steht da:

"und NICHT an übermäßig vielen Stellen im Programm..."
und
"sehr häufig pro Programmdurchlauf..."

was jetzt wann benutze ich inline und wann nicht

da steht einmal wenn nicht an vielen stellen vorkommt und einmal wenns sehr häufig vorkommt???

weigo

Treue Seele

Beiträge: 234

Wohnort: Deutschland

  • Private Nachricht senden

2

31.03.2005, 08:42

Zwei Faustregeln sind:

- Inline nur für Methoden, die sehr klein sein ( < 3 Zeilen )
- Nur für Methoden, die keine anderen Methoden verwenden

Wenn die Methode sehr oft aufgerufen wird, dann kostet das Zeit, durch inline wird quasi der Aufruf durch den Code ersetzt. Aus diesem Grund, darf die Methode auch nicht lang und komplex sein.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

31.03.2005, 20:44

inline's machen aber nur bei einem Release Sinn. Wenn man das Projekt nur "Debugt" werden inline's nicht von MS Visual C++ behandelt, also nicht für den Code ersetzt (hab ich jedenfalls mal gelesen)

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

4

31.03.2005, 21:50

Facer:
Die Angaben sind beide korrekt. Sagen wir die Funktion wird in einer Schleife 10000x pro Frame durchlaufen. Sonst wird die Funktion nirgendwo benutzt. D.h. 10000 durchlaufen, einmal im Program => inlinen!

Der Grund ist einfach:
Der Vorteil des Inlinens ist dass der Aufruf schneller ist. D.h., je mehr Aufrufe (pro Frame / Sekunde / programmlauf), desto größer ist der Vorteil.

Der Nachteil des Inlinens ist dass jedes mal das die Funktion im Code vorkommt, Platz verbraten wird. Im Extremfall, dass die Funktion nur einmal vorkommt, hat ein Inlinen (im release build) keinen Nachteil, den ich kenne.

Weigo, kannst Du das begründen?
"Games are algorithmic entertainment."

5

02.06.2005, 15:22

Inline Funktion solltest du wirklich nur für kleine Funktionen einsetzen, die keine anderen Funktionen aufrufen.
Ein gutes Beispiel dafür sind Vectoren-Klassen.
bzw. kannst du Rückgabewerte welche du mit GetMethoden abfragst auch gründsätzlich inline dafinieren.

u32 GetIndex(void) {return m_nIndex;}

Alles klar?

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

6

02.06.2005, 18:09

Das mit den kleinen Funktionen muss nicht unbedingt immer stimmen. Zwar gilt im Allgemeinen, dass der Code durch die Verwendung von inline größer wird. Doch heutzutage sind die Compiler schon so gut, dass durch die Verwendung von inline Code sogar kleiner werden kann, als ohne inline (natürlich nicht immer), da der Compiler große Codeblöcke ohne Unterfunktionsaufrufe oftmals viel besser optimieren kann.

mfg Philipp

Anonymous

unregistriert

7

11.06.2005, 19:43

Guten Tag

Inline funktionen

Vorteil: Sind schneller wie normale Methoden

Nachteil: Die EXE Datei ist größer (je nach umfang der Inline Methode)

So steht es zumindest in meinen Buch :) C++ Das Einsteigerseminar

Anonymous

unregistriert

8

11.06.2005, 19:49

Ich muss da noch was ergänzen also ASM ist ja die Mutter aller Programmiersprachen. Der ASM Code für die Funktion X wird mit (call X oder so ähnlich) aufgerufen wenn Sie keine inline Methode ist und mit inline X wird der ASM code, der in der funktion X steht, einfach eingesetzt. (Das ist schneller verbraucht aber mehr platz für die EXE)

ich hoffe mal das, dass verständlich ist :huhu:

Deswegen ist es auch zu empfehlen für die Vektor Berechnung inline zu verwenden denn das ist schneller ;) und schnell ist wichtig :)

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

9

12.06.2005, 20:46

Zitat von »"weigo"«

Inline nur für Methoden, die sehr klein sein ( < 3 Zeilen )

So ein Schwachfug!

bei großen funktionen nicht. wenn die funktion 200 bytes kostet aber ein aufruf nur 10 bytes, dann ruft man natürlich auf (außer, die funktion wird sicher nur ein einziges mal gebraucht). bei sehr kleinen funktionen muss aber inline sein. da ist dann das reinkopieren des funktionscodes billiger als ein aufruf. und inline-ersetzung findet ja vor dem, optimieren statt. deswegen kann's auch oft vorkommen, daß man eine inline-funktion als mit 0 bytes zu buche schlagend feststellen darf.


Zitat von »"weigo"«

Nur für Methoden, die keine anderen Methoden verwenden


Noch mehr Schwachfug!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
inline void foo (void)
{
    ::std::cout << "Hallo " << std::endl;
}

inline void bar (void)
{
    foo ();

    ::std::cout << "Welt!" << std::endl;
}


vs.:

inline void foo (void)
{
    ::std::cout << "Hallo " << std::endl;
}

void bar (void)
{
    foo ();

    ::std::cout << "Welt!" << std::endl;
}

Aufruf:
bar ();

Na was währe denn "Schneller und Besser"? Definitiv Variante 1. Warum? Bei Variante 2 bekommt bar einen Funktionsaufruf, bei Variante 1 nicht. Ergo: Lamer, Kostspieliger und einfach Sinnloser.

- Patrick

Werbeanzeige