URL: https://www.overclockers.at/coding-stuff/problem_mit_atan_in_c_38550/page_3 - zur Vollversion wechseln!
also was jetzt 
Zitat von thatErnsthaft: Pointer sind natürlich langsamer als der direkte Zugriff auf die Variable.


Bitte informier dich erst (schau dir z.b. den generierten Assemblercode an, oder mach Performancetests), bevor du postest.
da brauchma kein assembler freak sein, da reicht imho logisches denken 
Ich will ja nix sagen aber:
http://www.cantrip.org/wave12.html
http://www.codeproject.com/cpp/garb....asp?print=true
http://www.relisoft.com/book/lang/poly/2implem.html
und am wichtigsten:
http://www.eventhelix.com/RealtimeM...Performance.htm
und da gibts noch einiges...
und nochwas: http://www.cantrip.org/realworld.html
Und wo in den vielen Dokumenten steht, dass ein Zugriff auf int *p schneller ist als auf int i ?
des is doch alles vollkommen irrelevant
OO is natürlich viel langsamer, als wennman alles komplett händisch in maschinensprache programmiert
aber das isja net da sinn der sache
OO soll das programmieren erleichtern. man soll kompliziertere zusammenhänge und vorgänge einfacher darstellen können, als wennman alles händisch macht
und da spielt performance a untergeordnete rolle
natürlich optimiert man bei einem performance-kritischen einsatz des programms den code, bevor es released wird
aber da spielen sachen wie pointer oder direkte variable, wert ausrechnen oder gleich reinspeichern, nur eine sehr kleine rolle
da gehts mehr um strukturelle optimierung
zb. nicht 3 schleifen hintereinander, um etwas zu analysieren, sondern versuchen, es in einer zu schaffen
hab mir ein kleines testtool geschrieben, und der direkte zugriff ist um 33% schneller
Zitat von thatUnd wo in den vielen Dokumenten steht, dass ein Zugriff auf int *p schneller ist als auf int i ?

ein doc, in dem steht, "dass sich im endeffekt eh alles aufhebt" nehm ich mir vielleicht als einsteiger her, aber als Guide wenns um Performanceoptimierung geht, isses eher unbrauchbar.
bzgl. der Performance von OO in C++ kann ich nicht wirklich eine Aussage machen, da ich mich mehr in der C-Welt zuhause fühle 
Zitat von .deRElict.ein doc, in dem steht, "dass sich im endeffekt eh alles aufhebt" nehm ich mir vielleicht als einsteiger her, aber als Guide wenns um Performanceoptimierung geht, isses eher unbrauchbar.
bzgl. der Performance von OO in C++ kann ich nicht wirklich eine Aussage machen, da ich mich mehr in der C-Welt zuhause fühle
Wenn man's gescheit anstellt, hat man in C++ keine Performanceeinbußen gegenüber C.
Zitat von RingdingWenn man's gescheit anstellt, hat man in C++ keine Performanceeinbußen gegenüber C.

Zitat von Ringding(normale Befehle brauchen einen Takt, und davon koennen auch noch mehrere im selben Takt ausgefuehrt werden)
Hey Jungs!
Um ein paar Dingle klarzustellen: auf einem P2/P3 wird sogar ein Sinus in einem Taktzyklus bearbeitet. Der ASM-Befehl dafür ist fsin.
Bzgl. des Variablenzugriffs:
int *i = new int;
macht intern unter anderen so was:
void *i = malloc (sizeof (int));
D.H. er muß jedes mal von der Runtimelibrary (MSVCRT, LIBC, ...whatever) Speicher allokieren. Diese legt davor und danach noch Checkbytes um sicherzustellen, das der Speicher zwischen new und delete nicht überschrieben wurde.
Auf gut Deutsch da hängt ein ziemlich langer Rattenschwanz dran!
Unter Window$ läuft es bei automatischen Variablen (int i
so,
das am Anfang das ESP Register um 4 Byte (die Größe eines ints) geändert wird und anschließend kann mit einer relativen Anweisung [ESP+x] direkt drauf zugegriffen werden!
Und kümmert euch bitte nicht darum statt (1 + 4) (5) hinzuschreiben, das checkt echt JEDER noch so blöde Compiler (Sogar das alte Turbo Pascal konnte das, obwohl der nun wirklich nicht sonderlich optimiert hat)! Im Zweifelsfall den Compiler arbeiten lassen - der macht es besser und kennt meistens mehr Tricks!
Nochmal bzgl. Pointer:
Pointer sind wichtig wenn man eine Struktur ab zB. 50 Byte verwendet. Um zu vermeiden, das bei jedem Funktionsaufruf 50 Byte kopiert werden müssen wird nur ein Register (der Pointer) kopiert. Außerdem sind Pointer (als Arrays) wichtig, wenn man erst zur Laufzeit weiß wieviele Elemente ein Array fassen soll. Bei Performance kritischen Operationen sollte sogar hier ein statisches (überdimensioniertes) Array verwenden werden.
So, genug geschwafelt.
Regards
PHaX
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026