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!
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.
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
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.
S. R. schrieb: > Dazu den RAM vor dem Start mit 0xD00FC0DE initialisieren Ich kannte das bisher als 0xDEADBEEF. ;-)
0xB16B00B5 Darf aber nicht in jedem land verwendet werde...
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.