malloc, Heap & Theorie

Gast #365943
Lesenswert?
• ▲
▼
Hallo Leute!
Ich versuche gerdae die Theorie hinter "malloc" (bzw.
Speicherallokierung allgemein) zu verstehen.

Ist es bei PCs so, dass Befehele wie malloc direkt ans Betriebsystem
gehen, dass den Heap für mein Programm verwaltet? Und dass dieses mir
dann den gewünschten Speicherbereich reserviert, und dessen Addresse
(Pointer) zurückgibt?

Und wenn ja, wie sieht das ganze z.B. auf einem AVR aus? Hier gibt es
ja kein Betriebssystem...
Und welche Belegungsstrategien verwendet so ein AVR? (first-fit,
next-fit, quick-fit...)?

Gibt es vieleicht irgendwo ein paar schöne Seiten/Papers die das mal
genauer erklären, was da so in einem Mikrocontroller abläuft?

Vielen Dank für eure Tips!
Gast #365944
Lesenswert?
• ▲
▼
PS: Zunächst hat die Library ihre eigene Speicherverwaltung. Nur wenn
sich dort nicht findet, wird das Betriebssystem bemüht, dann aber eher
in grösseren Blöcken (n*4K), nicht bloss für 10 Bytes. free() gibt
nicht ans BS zurück, sondern der Speicher verbleibt der Anwendung und
wird für künftige malloc()s verwendet.

AVR: Die Doku der Library könnte helfen, ebenso deren Quellcode (die
ultimative Doku, sagt Microsoft ganz offiziell ;-).
Gast #365945
Lesenswert?
• ▲
▼
> free() gibt nicht ans BS zurück, sondern der Speicher verbleibt
> der Anwendung und wird für künftige malloc()s verwendet.

Das ist systemabhängig. Bessere geben den Speicher auch zurück, wenn
möglich (also wenn eine 4k-Seite komplett frei ist).
Gast #365947
Lesenswert?
• ▲
▼
War nicht immer so. In den älteren Versionen von Unix gab es eine obere
Grenze des benutzten Heaps (der "break" Wert, daher "sbrk()") und
wenn man die nicht grad selber setzte, ist die nur angewachsen.
Allokation in 4KB-Pages gab es nicht, folglich auch keine Deallokation.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren