Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
18.04.2002, 10:36
WareWolf



Da ich immer gern weiss, welcher Code nun effektiv vom C++ Compiler erzeugt wird, habe ich mir mal den Code bei eigens erstellten kleinen Beispielprogrammen angeschaut.

Es geht um Klassendefinition, speziell um die innerhalb der Klasse verwendeten Methoden.
Wenn ich Lehrbuchmässig vorgehe und in meiner Klassendeklaration nur die Prototypen meiner Methoden einsetze und die eigentlichen Methoden selbst ausserhalb platziere, wird eine sehr einfache Codestruktur erzeugt: Die Routine der Methode liegt irgendwo einmal im Speicher und jedesmal bei Verwendung der Klasse wird dahin verzweigt. Das sieht zunächst ja ganz gut aus, aber bremst gehörig den Programmfluss. Da werden temporäre Speicherinhalte, Prozessorregister, Flags usw. auf dem Stack zwischengespeichert und nach Beendigung auch wieder restauriert. Dies kann mehr Leistung in Anspruch nehmen, als die Methode selbst.

Nun könnte man ja sagen, das ist wurscht und bei irgendwelchen Büroanwendungen kann das auch tatsächlich wurscht sein, aber bei technischen Programmen oder bei der Spieleprogrammierung ist die Geschwindigkeit des erzeugten Codes meiner Meinung nach sehr wichtig.

Nun meine eigentliche Frage: Ich kenne mich mit den Compilern zu wenig aus, aber gibt es vielleicht eine Compilereinstellung,#präprozessor-Anweisung oder ähnliches um den Compiler zu überreden, direkt den Code dort zu plazieren, wo er auch später gebraucht wird?

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
001
18.04.2002, 11:29
Tron



inline einfach bei der methodendeklaration dazusetzen, also inline int thefunction();
allerdings muss sich dann die implementierung auch in der headerdatei befinden.

dies beschleungigt nicht zwangslaeufig das programm, es kann sogar verlangsamen! stichwort: paging, cache

eine strategie ist es erst ohne inline zu coden, dann profilen und dann fall fuer fall inline zu verwenden und wieder profilen.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
002
18.04.2002, 12:18
WareWolf



oh THX, das ist genau das, was ich brauche.
Wenn ich die Methode nämlich in einer inneren Schleife benötige, welche 100mal pro Hauptschleife ausgeführt wird, spart dies Unmenge Zeit.
Nächste Frage dazu:
Bei Verwendung von "fertigen" Klassen, also von Klassenbibliotheken kann ich das ja nicht anwenden, ohne an den Bibliotheken selbst zu schrauben, was man ja nicht darf, bzw soll. Was mach ich dann?

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
003
18.04.2002, 16:01
[RMen]OneStone



- Fertiges Progamm Disassemblieren
- via Copy & Paste den ASM Code an der entsprechenden Stelle einfügen

Die entsprechende Stelle markierst du am besten mit nem __asm XOR BX, 254, wird sonst nirgends vorkommen (Pushen & Poppen nicht vergessen!).
Ne andere Möglichkeit gibts IMO nicht.

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
004
18.04.2002, 16:14
Tron



OneStone, was laberst du da?

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
005
18.04.2002, 16:23
[RMen]OneStone



Was ist das für eine sinnlose Äusserung? Was gefällt dir daran denn nicht?

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
006
18.04.2002, 17:53
Kriz



o_O

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
007
19.04.2002, 00:55
Another1



'Georg Wicherski is irre'
(durch die '...' habe ich versucht die obige aussage wie ein quote aussehen zu lassen ... hmm .. hoffe es hat geklappt ... :rolleyes:)

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
008
19.04.2002, 09:27
WareWolf



hmmm...ich bin mir jetzt nicht mehr so ganz sicher, ob ich nun verarscht wurde oder nicht =)

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
009
20.04.2002, 15:44
m0rgu3



Nimm halt einfach keine Klassen her... Normales C

--

Man brauchte drei C64 um zum Mond zu fliegen. Win2k braucht mindestens einen PII 350. Irgendwas stimmt doch da nicht!

zum Seitenanfang zum Seitenende Profil || Suche
010
20.04.2002, 18:27
Tron



und warum sollte er das?

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
011
20.04.2002, 18:33
blair



Na das ist doch ganz eindeutig!
Er stellt eine frage, die speziell auf Cpp zugeschnitten ist, weil er in wirklichkeit nur mit C coden will.

Gut das m0rgu3 uns darauf hingewiesen hat...

--

because our freedom sits at the end of a gun
we're all here getting beat up and held back
we're all here digging knives from our backs

zum Seitenanfang zum Seitenende Profil || Suche
012
21.04.2002, 12:49
WareWolf



bei eigenen Klassendeklarationen ist mir das jetzt auch klar, durch den Hinweis auf "inline". Ausserdem habe ich festgestellt, dass wenn ich die Methoden direkt in der Klasse (unter public) definiere, wird der Code der Methoden auch jedesmal an die Stelle platziert, an die er soll. Also entgegen den Lehrbüchern nicht die Prototypen sondern die komplette Methode.
Wenn man das weiss, kann man sich danach richten.
THX

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
013
21.04.2002, 13:24
[RMen]OneStone



Was habt ihr denn alle? Was ich geschrieben habe ist doch richtig. Warum bin ich plötzlich irre?

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
014
21.04.2002, 13:40
Tron



sagt dir atomkanonen-spatzen-prinzip was?
was du da vorschlaegst ist etwa so praktikabel wie das transportieren von wasser (>0°C, um irgendwelchen scherzkeksen vorzubeugen) in einem sieb.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
015
21.04.2002, 14:36
[RMen]OneStone



Na gut... War ja nur nett gemeint...

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
016
22.04.2002, 20:57
TheTinySteini



btw dürfte die Vorgehensweise einige Offset-Adressen durcheinander bringen...

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
017
25.04.2002, 19:46
thinktank



Benutzt ihr eigentlich inline - ASM ?

--

zum Seitenanfang zum Seitenende Profil || Suche
018
25.04.2002, 21:56
TheTinySteini



Nö... nur für evil hacks. Ne, ehrlich gesagt, nein. Nur aus reiner Neugierde wie das ganze so geht hab ich damit mal was gemacht. Aber sonst reicht eigentlich stinknormales C/C++.
So geschwindigkeitskritisches Zeug hab ich auch noch net gecodet.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
019
26.04.2002, 14:38
Prefect



Außerdem kann man selbst aus geschwindigkeitskritischem Zeug oft kaum mehr was rauskitzeln - es sei denn man kann z.B. Instructionsets wie MMX anwenden. Meistens hilft ein effektiverer Algorithmus bzw. effektivere Datenstrukturen viel mehr beim Optimieren.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
020
26.04.2002, 16:11
anothergb02



JA eine gute, schnelle/effektive und schön anzusehende Engine müsste wohl immer !! Grundlage sein ! Wobei ich doch schon für die Nutzung von Inline bin.
Die Grundlagenalgorithmen sollten immer dammit beschrieben werden .... Ob das nun aber so viel hilft kann ich selber nicht sagen, da ich es zwar verwende aber noch nie einen so extremen Effekt bermerkt habe, dass es erwehnenswert ist bzw. ich habe es gar nicht erst getestet :/

--

Being in john Malkovich
.....

zum Seitenanfang zum Seitenende Profil || Suche
021
27.04.2002, 12:51
Mazze



Jetzt mal ganz Allgemein:
Wann sollte man eine Funktion inline machen?

Wenn sie sehr oft aufgerufen wird?

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
022
27.04.2002, 13:06
thinktank



Soweit ich weiß, wenn sie ziemlich klein ist. Also so wie
z.B. :
inline void VectorClear(float *a) { a[0]=0.0;a[1]=0.0;a[2]=0.0;}

Worin besteht der Unterschied zwischen einem Makro und
einer inline Funktion ?

--

zum Seitenanfang zum Seitenende Profil || Suche
023
27.04.2002, 14:09
Ferdi



wenn die Funktion so simpel ist dass der Call Overhead einer normalen Funktion die Performance beeinträchtigen würde

--

zum Seitenanfang zum Seitenende Profil || Suche
024
27.04.2002, 14:35
Mazze



aha.
thx

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche