[Python-Dev] Changing pymalloc behaviour for long running processes

Dan Sugalski dan at sidhe.org
Tue Oct 19 18:29:15 CEST 2004


At 12:14 PM -0400 10/19/04, Tim Peters wrote:
>[Evan Jones]
>  > The short version of the problem is that obmalloc.c never frees memory.
>
>True.  That's one major problem for some apps.  Another major problem
>for some apps is due to unbounded internal free lists outside of
>obmalloc.  Another is that the platform OS+libc may not shrink VM at
>times even when memory is returned to the system free().

FWIW, at this point nearly all OSes have a means of allocating memory 
from the system that can then later be returned to the system. 
(malloc and free tend *not* to do this) Even on Unix platforms you 
can play the "mmap a file with no filename" game to get returnable 
chunks. Unfortunately there's often a limit to the number of these 
chunks you can get from the OS so it's not safe to unconditionally 
replace malloc and free. (The performance impact isn't worth it 
either)

If someone's going to do this, I'd suggest the place to start is 
adding separate allocate and free API entry points for returnable 
chunks and put in some criteria for getting memory from them 
(allocation size, particular spots that allocate, or whatever) and 
see where you go from there.

I'll point out that, from experience, this can be a non-trivial 
thing, and with a non-moving GC system you'll probably find that 
there are relatively few places where there's a win from it. It does, 
though, tend to flush out dangling pointers. (Whether this is good or 
bad is a separate issue, of course ;)
-- 
				Dan

--------------------------------------it's like this-------------------
Dan Sugalski                          even samurai
dan at sidhe.org                         have teddy bears and even
                                       teddy bears get drunk


More information about the Python-Dev mailing list