|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
X-FILE Super JLI'ler
Anmeldedatum: 12.07.2003 Beiträge: 349
Medaillen: Keine
|
Verfasst am: 29.08.2003, 21:05 Titel: Geschwindigkeitsfrage |
|
|
Hallo,
so aus Neugier wuerds mich mal interessieren. Wie sehr leidet die Performance eines C++ Programms unter Funktionsaufrufen?
Ich meine Gut. Das allein machts nicht, aber nehmen wir an, ich habe eine Funktionalitaet ueber mehrere (3-7 ums mal richtig reinzuhauen ) Funktionen verteilt, die so immer nacheinander aufgerufen werden. Ist das wesentlich schlimmer, als wenn ich alles in Einer habe?
Ich weiß, dass das jetzt rein Utopische Werte sind und in einer normalen Anwendung wohl kaum zum tragen kommt, aber nehmen wir an, es kaeme Hart auf Hart. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 30.08.2003, 08:42 Titel: |
|
|
Erstmal hat da noch niemand nach gefragt, also wird es wohl nicht von Bedeutung sein. Zweitens kommt es ganz auf dein Programm an. Wenn du es unbedingt wissen willst, musst du mit einem Profiler ran. ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 30.08.2003, 09:37 Titel: |
|
|
Der eigendliche Funktionsaufruf im gegensatz zu linear Programmierter (oder inline) Funktionsweise ist so gering, das er wirklich vernachlässigt werden kann.
Du übergibst den Funktionen ja wohl nicht Variablen mit Megabytegroßen Inhalten, oder? Solange es sich um ein paar Zeiger und ein paar Integer/Float-Werte handelt kann man sogar ´tausende von Funktionen aufrufen, ohne das ein merklicher Geschwindigkeitseinbruch entsteht.
Merklich war es vielleicht früher, bei 386/16Mhz-Rechnern, aber nicht mehr heute.
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 05.09.2003, 21:32 Titel: |
|
|
AFE, da muss ich dir etwas widersprechen. Wenn du ne Funktion dauernd aufrufst bei ner Framerate von 60 dann schlaucht das Programm schon. Denn das geht so, so weit ich mich nicht irre:
Das Programm springt zur Funktion und legt im Speicher ein Zeiger an, der auf die Zeile nach dem Funktionsaufruf im QUellcode zeigt und legt noch Variablen im SPeicher an und belegt sie mit den übergebenen Werten und führt dann die Operationen durch.
z.B. hier: funktion(int einInt, float einFloat);
hier bei gibt er nur die Adressen der Variablen über und muss nicht extra zwei neue Variablen neu anlegen:
z.B. hier: funktion(int &einInt, float &einFloat);
bei der zweiten Variante hatte AFE total Recht! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 06.09.2003, 10:30 Titel: |
|
|
Wenn man Probleme mit der Geschwindigkeit hat, sollte man nicht unbedingt am Aufruf von Funktionen beginnen, es hat in der Regel ganz andere Probleme.
Einen Hinweis für exsessieve C++-ler:
Funktionen, die Vererbungsmechanismen und virtuelle Überschreibungen verwenden sind im Aufruf deutlich am langsamsten, da erst zur Lauzeit ermittelt wird, welche Funktion ausgeführt werden soll. Davon sollte man nicht allzu viele pro Sekunde aufrufen... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 06.09.2003, 11:01 Titel: |
|
|
Stimmt schon aber ein V-Table Lookup ist auch nicht viel anders als ein normaler Array-Lookup. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
|
|
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
|