summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Schemenauer <nascheme@enme.ucalgary.ca>2002-03-22 15:25:18 (GMT)
committerNeil Schemenauer <nascheme@enme.ucalgary.ca>2002-03-22 15:25:18 (GMT)
commitffd53997286973bc6abcfdc0fae92aaa88b51f67 (patch)
treec1df9ea05196e8a59bd9d22162a82bda969a40fd
parent150ed6113ce0e6558eafa27149e75e1463df20df (diff)
downloadcpython-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_*).
-rw-r--r--Include/objimpl.h31
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
* ==========================
*