Schrift
[thread]6166[/thread]

speicherprobs: ram-speicher freigeben? (Seite 2)



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
kabel
 2004-03-27 18:15
#81296 #81296
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,26.03.2004, 17:17]* der Speicher wird korrekt per free() freigegeben, aber das OS kann die Speicherseiten nicht freigeben.[/quote]
Quote
Occasionally, free can actually return memory to the operating system and make the process smaller. Usually, all it can do is allow a later call to malloc to reuse the space. In the meantime, the space remains in your program as part of a free-list used internally by malloc.


aus den glibc docs.

kann man perl nicht mit einem alternativen memory allocator kompilieren? ... yo:

Quote
PERL_MALLOC_OK
defaults to 0. Should be set to TRUE if the extension can work with the memory allocation routines substituted by the Perl malloc() subsystem. This should be applicable to most extensions with exceptions of those

with bugs in memory allocations which are caught by Perl's malloc();
which interact with the memory allocator in other ways than via malloc(), realloc(), free(), calloc(), sbrk() and brk();
which rely on special alignment which is not provided by Perl's malloc().
NOTE. Negligence to set this flag in any one of loaded extension nullifies many advantages of Perl's malloc(), such as better usage of system resources, error detection, memory usage reporting, catchable failure of memory allocations, etc.


http://www.perldoc.com/perl5.6/lib/ExtUtils/MakeMaker.html

die genauen vorteile stehen da leider net :-/
-- stefan
sri
 2004-03-27 22:24
#81297 #81297
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Mich würden die genauen Bedingungen interessieren unter denen malloc den Speicher wieder an das Betriebssystem zurückgeben kann.
kabel
 2004-03-28 23:37
#81298 #81298
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ähem, hab mal in die source geguckt ...
und des ist mir eindeutig zu kompliziert ...
jedenfalls im moment ...
-- stefan
ptk
 2004-03-29 13:10
#81299 #81299
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=norman,26.Mar..2004, 22:16]PDL? habs gerade bei cpan gesehn. das ist ja ne menge holz. das wird ne weile dauern.

kannst du mir verraten welches der module für die datenhaltung zuständig ist?[/quote]
Ich habe mit PDL noch nie ernsthaft gearbeitet.
ptk
 2004-03-29 13:11
#81300 #81300
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=sri,27.Mar..2004, 00:20][quote=ptk,26.03.2004, 17:17]* der Speicher wird korrekt per free() freigegeben, aber das OS kann die Speicherseiten nicht freigeben. Das kann passieren, wenn hinter dem grossen Speicherblock noch kleinere Stuecke alloziiert wurden, die nach dem Freigeben des grossen weiter bestehen. Jetzt hat man ein riesiges ungenutztes Loch, das man nicht wegbekommt. Das ist nicht die Schuld von Perl, sondern des Speichermanagments des OS.[/quote]
Woher stammt das Beispiel wenn ich fragen darf?[/quote]
Selbst recherchiert: Experimente und ein Blick in die Sourcen von FreeBSD- und Linux-malloc.
ptk
 2004-03-29 13:13
#81301 #81301
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=norman,27.Mar..2004, 13:13]macht perl eigentlich speichertechnisch einen unterschied ob ich meine zahlen als 2.3434231234535 oder als 2.34 speichere?[/quote]
Nein, fuer beides wird ein NV benoetigt, es sei denn, du verwendest bignum oder aehnliches.
ptk
 2004-03-29 13:18
#81302 #81302
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=kabel,27.Mar..2004, 17:15][quote=ptk,26.03.2004, 17:17]
kann man perl nicht mit einem alternativen memory allocator kompilieren? ... yo:

Quote
PERL_MALLOC_OK
defaults to 0. Should be set to TRUE if the extension can work with the memory allocation routines substituted by the Perl malloc() subsystem. This should be applicable to most extensions with exceptions of those

with bugs in memory allocations which are caught by Perl's malloc();
which interact with the memory allocator in other ways than via malloc(), realloc(), free(), calloc(), sbrk() and brk();
which rely on special alignment which is not provided by Perl's malloc().
NOTE. Negligence to set this flag in any one of loaded extension nullifies many advantages of Perl's malloc(), such as better usage of system resources, error detection, memory usage reporting, catchable failure of memory allocations, etc.


http://www.perldoc.com/perl5.6/lib/ExtUtils/MakeMaker.html

die genauen vorteile stehen da leider net :-/[/quote]
Auch hier wieder Experimente: perl-malloc scheint beispielsweise speicherhungriger als das System-malloc von FreeBSD zu sein, aber bei manchen Operationen ist es wesentlich schneller (z.B. beim Loeschen eines grossen Hashes). Ich glaube allerdings, dass das perl-malloc niemals versucht, freien Speicher an das OS zurueckzugeben --- der maximale Speicherverbrauch bleibt ueber die gesamte Prozesslaufzeit bestehen.
ptk
 2004-03-29 13:25
#81303 #81303
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[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.
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2004-03-26 16:07.