Thread Perl und Garbage collector: Warum macht der Perl GC nichts?
(14 answers)
Opened by Gast at 2006-03-24 18:37
[quote=Relais,24.03.2006, 21:22][quote=renee,24.03.2006, 19:58]Perl handhabt es etwas anders, als Du Dir vielleicht vorstellst. Der Speicher wird bei Perl nicht wieder an das Betriebssystem zurückgegeben, sondern wird im Laufe des Programms für etwas anderes verwendet (wenn benötigt)...[/quote]
Können Programme während ihrer Laufzeit Speicher an das OS zurückgeben? Wie geht das?[/quote] Mir fallen zwei Möglichkeiten ein: 1. Speicherblöcke können per mmap belegt werden und dann einfach wieder mit munmap entfernt werden. Da mmap etwas teuer ist, macht man das typischerweise nur bei großen Speicherblöcken. 2. Wenn Speicherblöcke am Ende des Data-Segments freigegeben werden, kann das Data-Segment wieder geschrumpft werden. Leider ist das Schrumpfen Glückssache. Nehmen wir an, dass ein riesiger Speicherblock belegt und dann einen winzigen Speicherblock hinter dem riesigen anlegt wird. Jetzt wird der riesige Speicherblock freigegen. Das Data-Segment kann aber nicht verkleinert werden, weil sich am Ende der winzige Speicherblock befindet. Dieser kann auch nicht verschoben werden, weil mit Sicherheit (C-)Zeiger auf ihn zeigen. |