Ich compiliere mit dem GCC für den Xilinx Softcore microblaze (bzw. AEMB). Da habe ich nicht viel RAM. Deshalb schaue ich mir die Speicherverwaltung etwas genauer an. Wenn ich dem Linker zu wenig Heap-Platz gebe, gibt malloc immer 0 zurück. Des weiteren scheint malloc neben dem verwalteten Platz zusätzlichen Platz für eigene Datenstrukturen zu brauchen. Weiss jemand genaueres bzw. wo ich so etwas finde? PS: Ja ich weiss, dass malloc auf Mikrocontrollern verpönt ist, ich möchte das aber trotzdem verstehen.
Martin O. schrieb: > Weiss jemand genaueres bzw. wo ich so etwas finde? Der heap wird in der Regel nicht vom compiler implementiert, sondern in Form einer Library mitgeliefert. Beim GCC sollte das libc oder nano sein.
Bei meinem Projekt (Cortex M4) verwende ich als Heap die Implementierung von https://github.com/rhempel/umm_malloc und habe diese an libc angebunden, sodass malloc diese verwendet. Auf der Github Seite ist auch eine sehr ausführliche Beschreibung über die Funktionsweise und den Speicheroverhead für den Heap selbst. Spontan fallen mir mehrere Gründe ein, warum malloc mehr Speicher benötigt, als für alle Aufrufe zusammen angefordert wurde. Diese Gründe müssen aber nicht auf alle Systeme und Implementierungen zutreffen. 1) Verwaltungsstrukturen für den Heap selbst 2) Fragmentierung des Heap 3) Alignment auf Vielfaches der Systemwortbreite 4) Guardbytes vor und nach dem Speicherbereich um Bereichsverletzungen zu erkennen
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.