diff options
author | Neil Schemenauer <nascheme@enme.ucalgary.ca> | 2002-03-22 15:25:18 (GMT) |
---|---|---|
committer | Neil Schemenauer <nascheme@enme.ucalgary.ca> | 2002-03-22 15:25:18 (GMT) |
commit | ffd53997286973bc6abcfdc0fae92aaa88b51f67 (patch) | |
tree | c1df9ea05196e8a59bd9d22162a82bda969a40fd /Include | |
parent | 150ed6113ce0e6558eafa27149e75e1463df20df (diff) | |
download | cpython-ffd53997286973bc6abcfdc0fae92aaa88b51f67.zip cpython-ffd53997286973bc6abcfdc0fae92aaa88b51f67.tar.gz cpython-ffd53997286973bc6abcfdc0fae92aaa88b51f67.tar.bz2 |
Make PyObject_{NEW,New,Del,DEL} always use the standard malloc (PyMem_*)
and not pymalloc. Add the functions PyMalloc_New, PyMalloc_NewVar, and
PyMalloc_Del that will use pymalloc if it's enabled. If pymalloc is
not enabled then they use the standard malloc (PyMem_*).
Diffstat (limited to 'Include')
-rw-r--r-- | Include/objimpl.h | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/Include/objimpl.h b/Include/objimpl.h index 396c23b..e27de30 100644 --- a/Include/objimpl.h +++ b/Include/objimpl.h @@ -34,11 +34,10 @@ You must first include "object.h". allocator) and initialize its object header fields. Note that objects created with PyObject_{New, NewVar} are allocated -within the Python heap by an object allocator, the latter being -implemented (by default) on top of the Python raw memory -allocator. This ensures that Python keeps control on the user's -objects regarding their memory management; for instance, they may be -subject to automatic garbage collection. +within the Python heap by the raw memory allocator (usually the system +malloc). If you want to use the specialized Python allocator use +PyMalloc_New and PyMalloc_NewVar to allocate the objects and +PyMalloc_Del to free them. In case a specific form of memory management is needed, implying that the objects would not reside in the Python heap (for example standard @@ -84,9 +83,9 @@ extern DL_IMPORT(void *) PyObject_Realloc(void *, size_t); extern DL_IMPORT(void) PyObject_Free(void *); /* Macros */ -#define PyObject_MALLOC(n) _PyMalloc_MALLOC(n) -#define PyObject_REALLOC(op, n) _PyMalloc_REALLOC((void *)(op), (n)) -#define PyObject_FREE(op) _PyMalloc_FREE((void *)(op)) +#define PyObject_MALLOC(n) PyMem_MALLOC(n) +#define PyObject_REALLOC(op, n) PyMem_REALLOC((void *)(op), (n)) +#define PyObject_FREE(op) PyMem_FREE((void *)(op)) /* * Generic object allocator interface @@ -179,6 +178,22 @@ extern DL_IMPORT(void) _PyObject_Del(PyObject *); constructor you would start directly with PyObject_Init/InitVar. */ /* + * The PyMalloc Object Allocator + * ============================= + */ + +extern DL_IMPORT(PyObject *) _PyMalloc_New(PyTypeObject *); +extern DL_IMPORT(PyVarObject *) _PyMalloc_NewVar(PyTypeObject *, int); +extern DL_IMPORT(void) _PyMalloc_Del(PyObject *); + +#define PyMalloc_New(type, typeobj) \ + ( (type *) _PyMalloc_New(typeobj) ) +#define PyMalloc_NewVar(type, typeobj, n) \ + ( (type *) _PyMalloc_NewVar((typeobj), (n)) ) +#define PyMalloc_Del(op) _PyMalloc_Del((PyObject *)(op)) + + +/* * Garbage Collection Support * ========================== * |