Commit 56716150 authored by Armin Rigo's avatar Armin Rigo

This is the fastest I could get on Intel GCC. I kept the memset() in to clear

the newly created tuples, but tuples added in the freelist are now cleared in
tupledealloc already (which is very cheap, because we are already
Py_XDECREF'ing all elements anyway).

Python should have a standard Py_ZAP macro like ZAP in pystate.c.
parent abce8a68
...@@ -68,9 +68,8 @@ PyTuple_New(register int size) ...@@ -68,9 +68,8 @@ PyTuple_New(register int size)
op = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size); op = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size);
if (op == NULL) if (op == NULL)
return NULL; return NULL;
memset(op->ob_item, 0, size*sizeof(PyObject*));
} }
for (i=0; i < size; i++)
op->ob_item[i] = NULL;
#if MAXSAVESIZE > 0 #if MAXSAVESIZE > 0
if (size == 0) { if (size == 0) {
free_tuples[0] = op; free_tuples[0] = op;
...@@ -165,19 +164,27 @@ tupledealloc(register PyTupleObject *op) ...@@ -165,19 +164,27 @@ tupledealloc(register PyTupleObject *op)
Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_SAFE_BEGIN(op)
if (len > 0) { if (len > 0) {
i = len; i = len;
while (--i >= 0)
Py_XDECREF(op->ob_item[i]);
#if MAXSAVESIZE > 0 #if MAXSAVESIZE > 0
if (len < MAXSAVESIZE && if (len < MAXSAVESIZE &&
num_free_tuples[len] < MAXSAVEDTUPLES && num_free_tuples[len] < MAXSAVEDTUPLES &&
op->ob_type == &PyTuple_Type) op->ob_type == &PyTuple_Type)
{ {
while (--i >= 0) {
PyObject* o = op->ob_item[i];
if (o != NULL) {
op->ob_item[i] = NULL;
Py_DECREF(o);
}
}
op->ob_item[0] = (PyObject *) free_tuples[len]; op->ob_item[0] = (PyObject *) free_tuples[len];
num_free_tuples[len]++; num_free_tuples[len]++;
free_tuples[len] = op; free_tuples[len] = op;
goto done; /* return */ goto done; /* return */
} }
else
#endif #endif
while (--i >= 0)
Py_XDECREF(op->ob_item[i]);
} }
op->ob_type->tp_free((PyObject *)op); op->ob_type->tp_free((PyObject *)op);
done: done:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment