Thread speicherprobs: ram-speicher freigeben?
(17 answers)
Opened by norman at 2004-03-26 16:07
[quote=sri,27.Mar..2004, 21:24]Mich würden die genauen Bedingungen interessieren unter denen malloc den Speicher wieder an das Betriebssystem zurückgeben kann.[/quote]
Bei Perl-malloc: niemals (glauche ich). Bei FreeBSD- und Linux-malloc: der freigegebene Speicherblock befindet sich am Ende des Heaps. Da man bei perl niemals weiss, wann ein malloc gemacht wird, kann man also Pech haben und nach dem "grossen" Speicherblock wird ein kleiner Speicherblock alloziiert, so dass das Freigeben an das OS nicht mehr klappt. Wenn sich der "grosse" Speicherblock beim Freigeben aber noch immer ganz "hinten" befindet, dann kann der Speicher an das OS freigegeben werden. Ich habe mal bei einer Linux-malloc-Version eine Environment-Variable gesehen, mit der man festlegen kann, dass grosse Speicherbloecke nicht in den Heap kommen, sondern per mmap() alloziiert werden. Hier hat man den Vorteil, dass dieser Speicher komplett an das System freigegeben werden kann. Da mmap() aber relativ langsam ist und die Zahl der mmap()-Speicherbereiche begrenzt ist, sollte man das nur bei grossen Speicherbloecken anwenden. |