Forum: Compiler & IDEs Heap-Verwaltung GCC Microblaze


von Martin O. (ossi-2)


Lesenswert?

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.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

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.

von M.K. B. (mkbit)


Lesenswert?

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