PyMem_* cross-Python-generation recommendation?
Michael Hudson
mwh21 at cam.ac.uk
Thu Apr 19 18:22:24 EDT 2001
"Mike C. Fletcher" <mcfletch at home.com> writes:
> From the Memory Interface document for Python 2.0, the following is
> described:
>
> In addition, the following macro sets are provided for calling the Python
> memory allocator directly, without involving the C API functions listed
> above. However, note that their use does not preserve binary compatibility
> accross Python versions and is therefore deprecated in extension modules.
>
> PyMem_MALLOC(), PyMem_REALLOC(), PyMem_FREE().
> PyMem_NEW(), PyMem_RESIZE(), PyMem_DEL().
>
>
> If I attempt to use PyMem_New in Python 1.5.2, I get a not-defined error,
> PyMem_NEW is there. Conversely, if I attempt to use PyMem_FREE in 1.5.2, I
> get a not defined error but PyMem_Free is there. So, I'm wondering, what
> combination should I use for an extension module (PyOpenGL) which requires
> compilation for both Python 1.5.2 and 2.x? Currently I'm just using
> PyMem_NEW and PyMem_Free. That compiles under both Pythons, but I have _no_
> clue what the implications of the choice are.
You probably want to use functions rather than macros (they have a
better chance of working across Python versions). PyMem_NEW sounds
like a macro and PyMem_Free like a function, but this may not actually
be the case.
Are you talking about binary or source compatibility here? I don't
know if binary compatibility works between 1.5.2 and 2.0 - I doubt it.
For source compatibility you can use #if hackery with
PYTHON_CAPI_VERSION to use the right one.
The interface is a bit of a mess pre-2.0, I believe. You probably
want to use the 2.0 one if you can.
HTH, though I'm not sure it does,
M.
--
While preceding your entrance with a grenade is a good tactic in
Quake, it can lead to problems if attempted at work. -- C Hacking
-- http://home.xnet.com/~raven/Sysadmin/ASR.Quotes.html
More information about the Python-list
mailing list