[Numpy-discussion] ANN: numpy.i - added managed deallocation to ARGOUTVIEW_ARRAY1 (ARGOUTVIEWM_ARRAY1)

Egor Zindy ezindy at gmail.com
Tue Nov 18 14:02:46 EST 2008


Hello list,

I just finished coding all the ARGOUTVIEWM fragments in numpy.i and 
wrote a wiki to explain what I did: 
http://code.google.com/p/ezwidgets/wiki/NumpyManagedMemory

No new information in there, but everything (explanations, links, code) 
is provided on a single page.

Regards,
Egor

Egor Zindy wrote:
> Dear List,
>
> after I tried to write a simple ARGOUTVIEW_ARRAY1 example (see 
> http://code.google.com/p/ezwidgets/wiki/NumpySWIGMinGW#A_simple_ARGOUTVIEW_ARRAY1_example 
> ), I started wondering about memory deallocation. Turns out a few 
> clever people already did all the thinking (see 
> http://blog.enthought.com/?p=62 ) and a few more clever people use 
> this in a swig file (see http://niftilib.sourceforge.net/pynifti, file 
> nifticlib.i).
>
> All this concentrated knowledge helped me implement a single 
> ARGOUTVIEWM_ARRAY1 fragment in numpy.i to do some testing (see 
> attached numpy.i).
>
> How to use it? In yourfile.i, the %init function has a few lines added 
> to it:
>
> %init %{
>   import_array();
>
>   /* initialize the new Python type for memory deallocation */
>   _MyDeallocType.tp_new = PyType_GenericNew;
>   if (PyType_Ready(&_MyDeallocType) < 0)
>       return; %}
>
> ... and that's it! then just use ARGOUTVIEWM_ARRAY1 instead of 
> ARGOUTVIEW_ARRAY1 and python does the deallocation for you when the 
> python array is destroyed (see the examples attached).
>
> Everything compiles, but it would be nice to get rid of the warnings...
>
> ezalloc_wrap.c:2763: warning: initialization from incompatible pointer 
> type
> ezalloc_wrap.c: In function `_wrap_alloc_managed':
> ezalloc_wrap.c:2844: warning: assignment from incompatible pointer type
> writing build\temp.win32-2.5\Release\_ezalloc.def
>
> Compilation:
> python setup_alloc.py build
>
> Testing:
> The attached test_alloc.py does 2048 allocations of 1MB each for 
> managed and unmanaged arrays. Output on my XP laptop with 1GB RAM as 
> follows:
>
> ARGOUTVIEWM_ARRAY1 (managed arrays) - 2048 allocations (1048576 bytes 
> each)
> Done!
>
> ARGOUTVIEW_ARRAY1 (unmanaged, leaking) - 2048 allocations (1048576 
> bytes each)
> Step 482 failed
>
>
> TODO:
> Find a better name for the methods (not sure I like 
> ARGOUTVIEWM_ARRAY), then do the missing fragments (2D arrays), clear 
> the warnings and verify the method for a possible inclusion in the 
> official numpy.i file.
>
> Thank you for reading!
>
> Regards,
> Egor
>




More information about the NumPy-Discussion mailing list