Liebe Spieleprogrammierer!
Ich würde gerne mal wissen welcher der beiden Speicherbereiche "Heap" oder "Stack" besser sind von der Performance. Gibt es dort überhaupt Unterschiede und wenn welche?
Das kommt aus dem Buch nicht deutlich hervor.
Ist es jetzt besser ein Array[100] auf dem Stack zu speichern oder auf dem Heap.
Da man ja auch ohne new und delete seine Instanzen von Klassen initalisieren kann.
|
C-/C++-Quelltext
|
1
2
3
4
|
1: CRaumschiff Spieler1; //Instanz Spieler1 befindet sich auf dem Stack
2: CRaumschiff *pRaumschiff=NULL;
pRaumschiff = new CRaumschiff; // Der Zeiger von pRaumschiff zeigt auf eine Instanz die sich auf dem Heap befindet.
|
Allgemeine Feststellung zu 1: Instanz wird kurz und schmerzlos erzeugt+. :top:
(Klar muss dabei festliegen das Spieler1 aufjedenFall erzeugt wird. -Man ist nicht mehr dynamisch mit der Verwaltung während der Laufzeit.)- :down:
Zu 2: Irgendwie alles sehr viel schwieriger zu verstehen und zubegreifen.Man benötigt viel mehr Tipperei vorallem muss man sich auch noch darum kümmern das man mittels delete den Speicher wird frei gibt und anschließend noch auf NULL setzen. :down:
2. Man hat jetzt nicht mehr wirklich schöne Namen für seine Instanzen wie pRaumschiff (nicht sehr aussagekräftig :down: da es sich um einen Zeiger handelt der irgendwo auf dem Heap zeigt.)
Meine Frage ist jetzt was soll das ganze? Wenn man schon im Vorfeld weiß das ich z.B. 10 Instanzen einer Klasse benötige dann bitte doch auf dem Stack. Oder ist der Heap schnell was den Zugriff angeht. Und es lohnt sich doch der Aufwand? Auf dem Heap nur Instanzen erzeugen bei denen ich während der Laufzeit nicht sicher bin und dynamisch wärend des Spiels erzeugt werden müssen. Man darf ja auch gleichzeitig Instanzen auf dem Stack und dem Heap haben.
Insofern ist doch zum Beispiel das HTML Logfile welches Heiko in dem Buch erzeut ein Fall für den Stack oder? (Singletons hin oder her)
Es ist doch im Vorfeld klar das eine Logfile Instanz erzeugt werden muss-- dann doch direkt auf dem Stack oder??
Beispiel:
So weiß ich doch z.B. das
|
C-/C++-Quelltext
|
1
|
CRaumschiff Spieler1;
|
wirklich der Spieler1 ist mit seinen Werten und
|
C-/C++-Quelltext
|
1
|
CRaumschiff Endboss;
|
der hat eben die Endboss Werte.
Besitze ich dagegen nur Zeiger dann weiß ich doch gar nicht mehr bei pRaumschiff =new Craumschiff [10];
das pRaumschiff[5] z.B. der Endboss ist. Das ist doch super kompliziert.
Wäre schön wenn man einfach mal was dazu schreibt! Und die Sache hier mal wirklich durch diskutiert. Vielleicht habe ich ja auch nur die falsche Einstellung -- lass mich auch gerne überzeugen. Da ich die Dinge gerne richtig verstehen möchte!
Mit bestem Gruß
Jens