/* This routines isn't a proper arena allocation routine. It takes
a PyObject* and records it so that it can be DECREFed when the
arena is freed.
- */
+ */
PyAPI_FUNC(int) PyArena_AddPyObject(PyArena *, PyObject *);
#ifdef __cplusplus
#include "Python.h"
#include "pyarena.h"
-/* A simple arena block structure
+/* A simple arena block structure
Measurements with standard library modules suggest the average
allocation is about 20 bytes and that most compiles use a single
and a list of PyObject* pointers. PyObjects are decrefed
when the arena is freed.
*/
-
+
struct _arena {
block *a_head;
block *a_cur;
static block *
block_new(size_t size)
{
- /* Allocate header and block as one unit.
+ /* Allocate header and block as one unit.
ab_mem points just past header. */
block *b = (block *)malloc(sizeof(block) + size);
if (!b)
assert(arena);
#if defined(Py_DEBUG)
/*
- fprintf(stderr,
+ fprintf(stderr,
"alloc=%d size=%d blocks=%d block_size=%d big=%d objects=%d\n",
arena->total_allocs, arena->total_size, arena->total_blocks,
arena->total_block_size, arena->total_big_blocks,
}
void *
-PyArena_Malloc(PyArena *arena, size_t size)
+PyArena_Malloc(PyArena *arena, size_t size)
{
void *p = block_alloc(arena->a_cur, size);
if (!p)
}
int
-PyArena_AddPyObject(PyArena *arena, PyObject *obj)
+PyArena_AddPyObject(PyArena *arena, PyObject *obj)
{
int r = PyList_Append(arena->a_objects, obj);
if (r >= 0) {