[SciPy-dev] Real culprit of previous memory problems with array scalars

Travis Oliphant oliphant.travis at ieee.org
Mon Nov 28 21:07:41 EST 2005


For those that don't follow the python-dev list, here is a summary of 
the real problem with the array scalars that was causing the Python 
memory manager to eat up memory.

The problem was in the array scalars that dual-inherited from both a 
Python type and the generic, base type.  Even though the generic, 
base-type was listed first, PyType_Ready filled the tp_free function 
with the Python Integer free function: int_free (which never released 
the previously allocated memory).   It worked correctly when the generic 
base type tp_free pointer was changed to "free" but curiously not when 
it was "PyObject_Del"

Thus, changing the memory allocator really just changed how the pointer 
table got filled in from inheritance.  Therefore, the Python memory 
allocator is not at fault.  It might be useful to go back to it as it 
allocates pools of memory at a time (which might make array scalar 
allocation faster).   We just have to make sure the correct tp_free is 
obtained on inheritance (we can easily over-ride what PyType_Ready does 
and force tp_free to be whatever is wanted).

-Travis




More information about the SciPy-Dev mailing list