Forum: Mikrocontroller und Digitale Elektronik Welche Stacksize bei 512 MBytes RAM?


von Stamsund (Gast)


Lesenswert?

Hi,

ich habe auf einem BeagleBone Black eine bare-metal Applikation laufen, 
bei der das Speicherlayout bisher so ausgelegt war, dass von den 512 
MBytes RAM satte 128 MBytes für den Stack vergeben waren.

Da das völlig übertrieben ist, würde ich das jetzt ändern, bin mir nur 
nicht sicher, wie viel Platz ich für den Stack vorsehen sollte. Nur mal 
so als grobe Hausnummer: sind 10 MBytes ausreichend?

Die Software selber macht keinen Mist, bei dem irgendwelche 
Riesenstrukturen an Funktionen übergeben werden, es wird alles brav 
gepointert.

Danke!

von H.Joachim S. (crazyhorse)


Lesenswert?

Brauchst du denn mehr freien RAM? Wenn nein, lass es so, wie es ist.
Wenn ja, musst du dich genauer damit beschäftigen. Ne Hausnummer 
(soundso viele MB sind ausreichend) gibt es nicht. Besonders aufpassen 
musst du bei Rekursionen.

von S. R. (svenska)


Lesenswert?

Wenn du keine Ahnung hast, dann beschaffe dir welche. ;-) Konkret: Miss 
doch einfach mal nach, was deine Anwendung an Stack braucht.

Dazu den RAM vor dem Start mit 0xD00FC0DE initialisieren, die maximale 
Heap-Ausdehnung merken und irgendwann mal gucken, wo das Muster wieder 
aufhört.

Eine andere Möglichkeit wäre, die MMU zu missbrauchen, wenn das bei der 
Anwendung geht. Also einfach eine Page vom Stack nicht in den Prozess 
mappen und erst vom PageFault-Handler bestücken lassen. Irgendwann 
kannst du dann nachschauen, bis wo (von oben) RAM gemappt ist - dort ist 
der Stack Pointer dann mal vorbeigekommen.

Noch besser wäre, wenn du einfach den Stack "unendlich groß" machen 
kannst, und den Heap auch. Wenn dann der Stack in den Heap wächst oder 
umgekehrt, dann weißt du, dass der RAM voll ist.

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Stamsund schrieb:
> Nur mal so als grobe Hausnummer: sind 10 MBytes ausreichend?

Kommt auf das Programm an, aber für mich klingt 10 MB als Stackgröße 
immer noch riesig.
Zum Vergleich: Auf meinem 64-Bit-Ubuntu auf dem PC ist die Stackgröße 
per Default für alle Programme auf maximal 8 MB limitiert.

von (prx) A. K. (prx)


Lesenswert?

S. R. schrieb:
> Dazu den RAM vor dem Start mit 0xD00FC0DE initialisieren

Ich kannte das bisher als 0xDEADBEEF. ;-)

von W.S. (Gast)


Lesenswert?

Ach, 1234AFFE geht auch, oder 47110815

W.S.

von m.n. (Gast)


Lesenswert?

0xDEADFACE

von LTC1043 (Gast)


Lesenswert?

0xB16B00B5

Darf aber nicht in jedem land verwendet werde...

von Ein Gast (Gast)


Lesenswert?

LTC1043 schrieb im Beitrag #4002570:
> 0xB16B00B5

Der Hammer!

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
Noch kein Account? Hier anmelden.