Hallo,
Dein RAM wird in 3 Teile aufgeteilt:
1. Platz für statische Variablen.
2. Stack. Auf dem Stack werden alle automatischen Variablen und die Parameter bei einem Funktionsaufruf abgelegt. Hinzu kommen noch die Rücksprung-Adressen bei Funktionsaufrufen und die Interrupts benötigen auch noch Platz auf dem Stack.
3. Heap. In C wird der Heap mit alloc() und Free() verwaltet in C++ meistens mit new und free.
Besonders der Stackbereich kann Probleme machen, wenn dieser überläuft, dann überschreibt er meistens einen der anderen beiden Bereiche.
Deine Bibliotheken benötigen auch entsprechenden Platz im RAM.
Das dies alles ins RAM passt, ist eine der Aufgaben der Programmierers.
Wie das aufgeteilt ist, verrät dir teilweise das Listing des Linkers.
Wie viel dynamischen Platz der Stack belegt, kannst du mit dem Debugger herausfinden.
Es gibt zwei Arten von dynamischem RAM:
1. Hardware: Hier bezeichnet es den Aufbau der Speicherzellen. Bei dynamischem RAM werden die Bits im Prinzip in Kondensatoren gespeichert. Da sich die Kondensatoren mit der Zeit entladen, muss die Information dauernd gelesen und neu gespeichert werden.
2. Programmtechnik: Wie oben beschrieben, z.B. der Heap. Das Programm kann zur Laufzeit einen Speicherblock anfordern und diesen dann benutzen. Braucht es diesen nicht mehr, gibt es ihn an den Heap zurück. Fordert das Programm erneut einen Block an, bekommt es einfach den nächsten passenden freien Block zugeteilt. Der Vorteil liegt einerseits darin, dass man beim Schreiben des Programms, noch nicht wissen muss, wie gross der Datenblock sein muss, das muss man erst bei der Anfrage an den Heap wissen. Andererseits kann man so das RAM besser ausnutzen, indem das RAM nur solange belegt wird, wie dieser Speicherblock auch benötigt wird.
MfG Peter(TOO)
Lesezeichen