Hallo Leute, Wie definiert man die Grösse von Stack und Heap genau? Ich habe immer eine Warnung das der Stack zu 100% voll ist. Wäre für einen Ratschlag dankbar. Thanks und Gruss Tony_S
Hallo Tony_S! Auf diese Frage habe ich auch lange eine Antwort gesucht. Bin jetzt mal zu folgendem Schluss gekommen: Das RAM beinhaltet den Datenspeicher, den Stack und den Heap. Datenspeicher: Im Datenspeicher werden die zur Kompilierzeit bereits bekannten Variablen angelegt; und haben ihren festen Platz. Sie stehen also vorher schon fest. Stack: Der Stack beinhaltet Rücksprungadressen und Übergabeparameter von Funktionen. Heap: Wird während des laufenden Programms zusätzlich neuer Speicher benötigt, wird dieser vom Heap bereitgestellt. Heapgröße muss daher glaub ich vorher angegeben werden (Compilereinstellung?). Stack und Heap teilen sich dabei den Speicherbereich. Der Stack stapelt sich von der einen Seite; und der Heap von der anderen Seite. Wird der Stack immer tiefer; und der Heap immer größer kann sich der Speicherbereich der beiden überlappen. Die Folge wäre dann wohl ein Programmabsturz. Wie gesagt; dieses Ergebnis habe ich mir zusammengereimt. Aber vielleicht kann dazu noch ein "alter Hase" besseres hinzufügen oder auch gänzlich korrigieren. Wäre auch für jede Information dankbar. Viele Grüße und viel Spaß beim Programmieren! Rainer
Wenn der Stack voll ist, dann ist der nicht unbedingt zu klein, sondern dein Programm packt zuviel darauf. Du solltest bedenken, dass alle lokalen Variablen, sowie Argumente für Funktionen auf dem Stapel abgelegt werden. Arrays so zu übergeben ist daher keine gute Idee, dazu gibt's Zeiger.
So viel ich weiss kann man die Grösse des Stacks nicht definieren. Wie bereits geschrieben wurde, wächst der Stack von der anderen Seite her als die Variabeln sind. Von da her ist es auch nicht nötig, den Stack zu definieren. Allerdings macht das Programm einfach mist oder stürtzt ab, wenn der Stack die Variabeln überschreibt. Die anderen Speicherbereiche werden beim GCC im Linker Script definiert. Für den MSP430F169 heisst das Linkerscript z.B. so: msp430x169.x
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.