Forum: Compiler & IDEs malloc, Heap & Theorie


von Vincent (Gast)


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!

von A.K. (Gast)


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 ;-).

von Rolf Magnus (Gast)


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).

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

es wäre sogar ziemlich übel wenn free() Speicher nicht ans OS
zurückgeben würde. Allerdings ist es so das free() nicht jeden Speicher
ans OS zurück gibt sondern nur in größeren Blöcken (in n-Speicherseiten
Einheiten, wie groß eine solche isthängt vom Prozessor bzw. dessen MMU
ab)

Matthias

von A.K. (Gast)


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.

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.