Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Frede

Treue Seele

  • »Frede« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hameln

Beruf: Schüler

  • Private Nachricht senden

1

17.04.2006, 20:26

Stack oder Heap???

Mir ist der Unterschied zwischen auf dem Stack oder Heap-Erstellen noch nicht klar geworden. Wann sollte man welche Methode benutzen ?
Kann mich jemand aufklären :angel: ?
Danke

Anonymous

unregistriert

2

17.04.2006, 20:33

Das eine wird zur Compilerzeit direkt reservert, das andere dynamisch zur Laufzeit und braucht Zeit.

Frede

Treue Seele

  • »Frede« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hameln

Beruf: Schüler

  • Private Nachricht senden

3

17.04.2006, 20:36

...

Okay, thx aba wann soll ich WAS benutzen ?
:crying: :crying: :crying:

Sheddex

unregistriert

4

17.04.2006, 20:43

Benutz einfach den Stack als "Standard" und den Heap halt wenn du ihn halt brauchst... irgendwann entwickelt man ein Gefühl dafür ;)

Achtung, richtige doofe "Regel": Benutz den Stack, wenns nicht geht den Heap ;) :P

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

17.04.2006, 21:07

den Stack für statische Daten, also Daten wo du weisst wie groß die Sind z.B. Lebensanzeige: Reichweite von 0-100, reicht locker ein unsigned short.

Wenn "unsigned short" hinschreibst, dann weiss der Compiler, aha der Programmmierer braucht so und soviel ByteSpeicher, ab in den Stack

Wenn du aber ein Array für alle Schüsse brauchst, weisst du ja vorher nicht wieviel in einem Spiel mal auftauchen werden, dazu muss man den Heap benutzen, da das Programm sich dann wenn es mehr braucht auch mehr Speicher nehmen soll, er soll ja eben NICHT statisch sein. So das wir den Spieler nicht mit dummen Grenzen belasten müssen a la "Das Spiel kann nur 32 Schüsse gleichzeitig darstellen - Absturz"

Kurzum das was nix da sagte

Frede

Treue Seele

  • »Frede« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hameln

Beruf: Schüler

  • Private Nachricht senden

6

17.04.2006, 21:47

Supa

:rolleyes: Ich glaub ich habs jetzt, Dankeschön!

7

18.04.2006, 00:27

Naja, bevor wir dich mit Halbwissen hier gehen lassen, schau dann doch lieber mal in der Wikipedia unter Stack nach.

Da ist schon ein recht ordentlicher Unterschied zwischen den beiden Sachen, aber warum soll ich mir die Finger wund schreiben, wenn es schon jemand anderes gemacht hat!

Übrigens wird jeder Funktionsaufruf - damit sind Rücksprungadresse, lokale Variablen die nicht auf dem Heap liegen etc gemeint - z.B. auf den Stack gelegt welcher nur eine sehr beschränkte Größe hat ( falls man den Stack nicht im Heap anlegt ), meist 64 KB. Daher kann es dir passiern, dass der Stack überläuft wenn du in eine zu große Rekursiontiefe gehst.

Anonymous

unregistriert

8

18.04.2006, 00:39

M@gg!
Na na na, Rekursionstiefen haben relativ wenig mit Funktionsstacks zu tun, außer des sie diese genau so sehr belegen wie jede andere Funktion - das ist dann aber auch schon alles. Rekursionstiefen bekommen extra Einstellungen zugewiesen bei guten Compilern für Rekursionstiefen, sowie interner Verwaltung von Rekursionen.

Und 64KByte ist etwas _sehr_ wenig. Allein schon bei Debugsystemen für Spiele und co. Daher wird die Stackgröße z. B. bei Express automatisch berechnet und meist auf 2 MByte gerechnet. Kann optional noch erhöht/gesenkt werden, macht aber absolut selten Sinn.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

9

18.04.2006, 07:56

Stack oder Heap-Erstellen Das hat nichts direkt mit Funktionen und Rekursionen zu tun.

10

18.04.2006, 08:30

"Funktionen" (wenn sie nicht inline sind) sollten nur ein Beispiel für Dinge die auf dem Stack landen sein. Natürlich haben sie in der Form nichts mit der Erstellung der beiden zu tun, hab ich aber auch nicht geschrieben.

Trotz dem gilt, je höher die Rekursionstief, außer vielleicht bei Tail Rekursion und nem guten Compiler, desto mehr "Funktionen" liegen auf dem Stack.

Ja, es stimmt man kann den Stack auch größer machen. Dieser ist allerdings standardmäßig meist recht klein. Kannst ja mal diese Funktion kurz mit den Parametern 1 oder 0 aufrufen.

C-/C++-Quelltext

1
2
3
4
5
6
7
void rek(bool num){
    
    std::cout << num << endl;
    if ( num == 1)
      rek(0);
    else rek(1);
}


Schneller gehts ohne cout, da die Ausgabe immer sehr lange dauert.

@Nix da: Ein gutes Programm braucht nicht mehr als 64KB, man denkt momentan sogar darüber nach in Linux bloß 4 KB einzusetzen.
Man lese dazu mehr hier

Werbeanzeige