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!
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 ;-).
> 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).
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.