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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.