JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=807434432835b8667d197459e7d64cb7Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

inline + Parameter als Referenz

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 06.12.2004, 16:24    Titel: inline + Parameter als Referenz Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 06.12.2004, 16:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.12.2004, 17:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 06.12.2004, 17:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.12.2004, 17:05    Titel: Antworten mit Zitat

ja ok, aber bringen die Parameter als Referenzen denn jetzt was?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 06.12.2004, 17:48    Titel: Antworten mit Zitat

Verhindern das temporäre Variablen erzeugt werden. Ansonsten Compiler anschmeißen und Dir den Assembleroutput geben lassen Smile
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.12.2004, 18:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 06.12.2004, 19:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 06.12.2004, 20:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 06.12.2004, 23:29    Titel: Antworten mit Zitat

jo gut, ich hab die beiden Fragen jetzt verstanden. Danke nochmal
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum