Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: bitmaster am 05. April 2009, 21:01

Titel: virtuelle Speicherverwaltung - free
Beitrag von: bitmaster am 05. April 2009, 21:01
Hi,

ich habe mir mal erlaubt den Source der Funktion free von tyndur (oder so) anzuschauen, weil ich wissen wollte, wie ihr das so mit dem wieder freigeben von Speicher macht. Nun stelle ich aber fest, dass der Speicher gar nicht wieder freigegeben wird. Wenn ich den Code richtig verstanden habe, wird stattdessen der memory node einfach in eine "Free-Liste" eingetragen. D.h., dass einmal reservierter Speicher gar nicht mehr freigegeben wird? Ist das nur eine "Notlösung" oder ist das wirklich die Funktionsweise von free?

thx

bitmaster
Titel: Re: virtuelle Speicherverwaltung - free
Beitrag von: bluecode am 05. April 2009, 23:56
hm, mir fällt es irgendwie schwer dir auf
Zitat
ist das wirklich die Funktionsweise von free?
zu antworten... Es ist einfach eine relativ einfache und relativ brauchbare Implementation. Es gibt wahrscheinlich dutzende andere - von einem free() das (gar)nichts tut bis zu einem free, dass mit der perfekte Balance an Speicherverbrauch und Geschwindigkeit auf jede Sequenz von (De)Allokationen reagiert und gleichzeitig noch massiv parallel benutzbar ist - die legitim sind. Die Frage wie mans implementiert hängt von den Ressourcen die man zum implementieren verwenden will und von dem Zweck ab. Ich würde sagen, die gewählte Implementation ist ausreichend. Andere Implementationen:
* hoard (http://www.hoard.org/)
* dlmalloc (http://g.oswego.edu/dl/html/malloc.html)
* liballoc (http://www.smk.co.za/products/liballoc/)
* ptmalloc (http://www.malloc.de/en/)
Anderer Algorithmus:
* Buddy allocation (http://en.wikipedia.org/wiki/Buddy_memory_allocation)

btw. iirc dann verwenden die in tyndur nicht diese Implementation, sondern eine externe unter BSD Lizenz.
Titel: Re: virtuelle Speicherverwaltung - free
Beitrag von: MNemo am 07. April 2009, 12:50
Nun stelle ich aber fest, dass der Speicher gar nicht wieder freigegeben wird.
Was verstehst du denn unter 'wieder freigeben'? Ich hab mir die tyndur-Implementierung jetzt nicht extra angesehen, aber was in der 'Free-Liste' wird wohl von malloc berücksichtigt werden, wenn es neuen speicher allocieren soll. Von daher würde ich das schon als wieder freigegeben bezeichnen.
Titel: Re: virtuelle Speicherverwaltung - free
Beitrag von: bluecode am 07. April 2009, 16:19
Er meinte halt an den Kernel zurückgeben, aber das wird eben nicht gemacht, aber dem Programm steht der Speicher natürlich beim nächsten malloc zur Verfügung.
Titel: Re: virtuelle Speicherverwaltung - free
Beitrag von: kevin am 07. April 2009, 19:25
btw. iirc dann verwenden die in tyndur nicht diese Implementation, sondern eine externe unter BSD Lizenz.
Wir haben drei verschiedene Implementierungen im Repository. Wirklich benutzt wird liballoc.