Where'd my memory go? (was Re: [Python-Dev] Dictionary sparseness)

M.-A. Lemburg mal@lemburg.com
Tue, 06 May 2003 18:12:32 +0200


Tim Peters wrote:
> [M.-A. Lemburg]
> 
>>If someone really care, I suppose that the garbage collector could
>>do an occasional scan of the int free list and chop of the tail
>>after a certain number of entries.
> 
> Int objects aren't allocated individually; malloc() is used to get single
> "int blocks", which contain room for about 1000 ints at a time, and these
> blocks are carved up internally by intobject.c.  So it isn't possible to
> reclaim the space for a single int, so "tail" doesn't mean anything useful
> in this context.

Hmm, looking at the code it seems that the different blocks
are not referencing each other. Wouldn't it be possible to link
them together as list of blocks ? This list could then be used
for the review operation.

>>FWIW, Unicode free lists have a cap to limit the number of entries
>>in the list to 1024.
> 
> The Unicode freelist is more like the frameobject freelist that way (it is
> possible to reclaim the space for an individual Unicode string or frame
> object).

Probably :-)

Would using the block technique from the int implementation
make a difference for the frame objects ? I would guess that a
typical Python program rarely has more than 100 frames alive
at any one time. These could be placed into such a block to
make setting them up faster, possible making Python function
calls a tad snippier.

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Software directly from the Source  (#1, May 06 2003)
 >>> Python/Zope Products & Consulting ...         http://www.egenix.com/
 >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________
EuroPython 2003, Charleroi, Belgium:                        49 days left