wie funktioniert malloc *genau*
-
Hallo,
ich rätsele aus (technisch) informatischer Sicht darüber wie malloc() genau funktioniert!? Wie muss ich mir das vorstellen? Wird über den Typ (sizeof) die Größe des Speichers angefordert und dann irgendwie über einen Systemaufruf speicher alloziiert? Kann mir da jemand genau Beschreiben was passiert oder gute Literatur dazu?
Danke
-
mallocator schrieb:
ich rätsele aus (technisch) informatischer Sicht darüber wie malloc() genau funktioniert!?
Das hängt von der Implementation ab, die Funktionsweise ist nicht vorgeschrieben.
Typischerweise wird es eine Datenstruktur zur Verwaltung von freien und belegten Speicherblöcken geben, in der malloc einen passenden freien Block sucht, zurechtschneidet und zurückliefert, während free einen belegten Block als frei markiert und ggf. aneinanderstoßende freie Blöcke verschmilzt. Nur, wenn es keine passenden freien Blöcke mehr gibt, wird das System gefragt.
-
danke schonmal fürs Erste.
Aber wie genau funktioniert (oder könnte funktionieren ganz generell)
der Prozess des Zurechtschneidens bzw. wie sieht die Datenstruktur aus? Eine (doppelt) verkettete Liste?
-
Eine verkettete Liste wäre eine Möglichkeit, ja.
-
-
danke erneut
...das zu verstehen könnte etwas länger dauern...
-
Dort wird unter anderem ein einfaches malloc und free für unix implementiert
https://www.ibm.com/developerworks/library/l-memory/
Vorsicht die Implementierung ist nicht C Standard konform. (zB void pointer arithmetik oder falsche malloc Signatur)
-
malloc bzw. die C Bibliothek verwalten den Speicher soweit als möglich selbst.
Typischerweise gibt es ein Pool für verschiedene Speicherblockgrößen, z.B. 32, 64, 128, ... byte. Hier kommt z.B. der Buddy Algorithmus zur Anwendung.Wenn der Speicher ausgeht, so wird das Betriebssystem um mehr Speicher gefragt. Das Betriebssystem erweitert den Bereich an virtuellem Speicher, der dem Prozess zugeordnet ist. Allerdings teilt das Betriebssystem den Speicher seitenweise zu, man bekommt also mindestens 4096 byte auf einen Schlag, danach kümmert sich die C Bibliothek wieder darum.
Ich bezog mich hier auf Linux, gibt auch andere Implementierungen.