www.mikrocontroller.net

Forum: Compiler & IDEs malloc, Heap & Theorie


Autor: Vincent (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-).

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.