On Thu, Apr 10, 2008 at 10:04 AM, Brian Granger <[EMAIL PROTECTED]> wrote:
>
>  >  >  Lisandro Dalcin (author of mpi4py) came up with the following trick
>  >  >  that, while more complicated, prevents memory leaks:
>  >  >
>  >  >  cdef extern from "Python.h":
>  >  >     object PyString_FromStringAndSize(char*,Py_ssize_t)
>  >  >     char* PyString_AS_STRING(object)
>  >  >
>  >  >  cdef inline object pyalloc_i(int size, int **i):
>  >  >     if size < 0: size = 0
>  >  >     cdef Py_ssize_t n = size * sizeof(int)
>  >  >     cdef object ob = PyString_FromStringAndSize(NULL, n)
>  >  >     i[0] = <int*> PyString_AS_STRING(ob)
>  >  >     return ob
>  >  >
>  >  >  and now
>  >  >
>  >  >  def foo(sequence):
>  >  >     cdef int size = len(sequence),
>  >  >     cdef int *buf = NULL
>  >  >     cdef object tmp = pyalloc_i(size, &buf)
>  >  >
>  >  >  This could probably be adapted into a malloc-like function.  What do
>  >  >  people think?
>  >
>  >  Could you explain what the point is?  Is it that this is a trick so that
>  >  Cython will correctly garbage collect the allocated memory, even
>  >  if an exception occurs?
>
>  Yes, that is the idea.  By having a python object that knows about the
>  memory, the garbage collection should prevent memory leaks if an
>  exception occurs.  I am not sure if Lisandro has proved that this is
>  the case - he is just wondering how people typically handle this case.
>
>  Seems like we are not alone in thinking this is a problem though.
>

It's I think a general problem not only in Python but in programming
in general.  The authors of http://www.flintlib.org/ -- a pure C library --
spent a lot of time worrying about this, just to I think decide that it's
a really hard problem.

That said, there is definitely a significant class of problems in the context
of Cython that could be fixed if Lisandro's suggestion works.  Thanks
for posting it!

William

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to