Dag Sverre Seljebotn wrote: > Stefan Behnel wrote: >> Dag Sverre Seljebotn wrote: >>> Stefan Behnel wrote: >>>> It might work >>>> to always use PY_NEW() for instantiation and then generate a separate >>>> (and direct) call to __init__() only if the type defines it. >>>> >>> Should one consider allocating arrays of cdef class objects as one big >>> memory block? >> >> We do not control the allocation, CPython handles that. > > OK. I didn't know exactly how fine-grained the CPython API was and > whether it was possible to run a constructor on already allocated memory > (like you can do in e.g. C++). It just seemed like that could be one of > the major bottlenecks.
What we tend to call PY_NEW here is a direct call to a type's tp_new(), which handles both the allocation and the basic initialisation of an instance. Cython could do a tiny bit better here, since we know exactly what function a cdef class has in its tp_new slot. However, that function will always recursively run into the base type's tp_new and at the end of the chain into the one of Python's 'type' type, and there is not much we can do to improve this situation in general. Stefan _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
