Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.12.2004, 16:24 Titel: inline + Parameter als Referenz |
|
|
ok, also Referenzen können schneller sein, weil dann nix kopiert werden muss. besonders bei größeren Datenmengen wie Matrizen.
Aber hat das denn auch bei inline Funktionen noch Sinn?Da muss doch eigentlich gar nix mehr kopiert werden. Oder etwa doch? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 06.12.2004, 16:34 Titel: |
|
|
Du hast noch den Funktionsaufruf was einen zusätzlichen Performance overhead erzeugt wenn inline nicht genutzt wird. Deshalb macht inline wenn es denn vom kompiler genutzt wird den Aufruf schneller. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.12.2004, 17:00 Titel: |
|
|
ja klar, das darum inline schnelle ist. Aber bringen Referenzen als Parameter im zusammenhang mit nline was?
Also Beispiel:
Code: |
inline int funktion(int x, int y)schreibt
{
return x+y;
}
main()
{
int z=Funktion(x, y)
}
//das wäre dann ja:
main()
{
int z=x+y;
}
main()
{
int x1=x, y1=y;
int z=x1+x2;
}
|
die zweite ist langsamer weil da noch kopiert wird. wird immer die erste möglichkeit benutzt oder nur wenn die Parameter Referenzen sind? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 06.12.2004, 17:02 Titel: |
|
|
Da stimm ich FallenAngel84 zu, ein call Aufruf dauert schonwas, darum sollte man wen möglich auch __forceinline benutzen, denn inline ist nur eine bitte an den Compiler und __forceinline ein "Befehl".
Achja __fastcall ist auch zu empfehlen! _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.12.2004, 17:05 Titel: |
|
|
ja ok, aber bringen die Parameter als Referenzen denn jetzt was? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.12.2004, 18:41 Titel: |
|
|
hm ja und mit Referenzen will ich ja genau das erreichen. Weil da wird ja die Variable benutzt und nicht eine temporäre Kopie der Variable. Also der Quelltext oben soll zeigen, was der Compiler aus meine inlne FUnktion macht, wenn er die in die main Funktion einsetzt. Einmal werden halt temporäre Variablen genutz und ein anders mal niht. Wenn ich die Parameter also nicht verändern will, mache ich die asl Referenz, damit die nicht kopiert werden. Ist das so jetzt richtig? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 06.12.2004, 19:46 Titel: |
|
|
Auch bei inline funktionen musst du referenzen benutzen, wenn du verhindern willst, dass die werte kopiert werden. Es macht da keinen unterschied, ob die funktion inline oder nicht inline ist. |
|
Nach oben |
|
 |
KI JLI Master

Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 06.12.2004, 20:29 Titel: |
|
|
Bei int Variablen lohnen sich keine Referenzen, weil die Referenz genauso groß ist wie die Integer-Variable.
In einem Fall wird eine 32-Bit-Referenz kopiert und im Anderen ein 32-Bit-Integer.
Referenzen würden sich z.B. bei Strings lohnen.
Übrigens,
__forceinline ist genauso wie __inline ein ein Micrsoft spezifsicher Befehl. Falls der Compiler eine Funktion, die mit __forceinline deklariert wurde, nicht inlinen kann, wird eine Warnung der Stufe 1 ausgegeben (4714).
Das kann z.B. bei rekursiven Funktionen passieren...
inline ist C++ spezisfisch und funktioniert im Gegensatz zu __inline und __forceinline nur in C++ und nicht in C. Aber das nur nebenbei... Wer mehr wissen will: inline, __inline, __forceinline [MSDN]
Nomalerweise reicht es wenn man inline oder __inline benutzt, weil der Compiler dann unter Berücksichtigung der Kosten und des Nutzens abwägt, ob sich ein Inlinen lohnt. |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.12.2004, 23:29 Titel: |
|
|
jo gut, ich hab die beiden Fragen jetzt verstanden. Danke nochmal _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
|