summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2016-01-31 16:56:21 (GMT)
committerRaymond Hettinger <python@rcn.com>2016-01-31 16:56:21 (GMT)
commitce5179fcbab40df1bf0a74a9ebf96cc7c1e061b3 (patch)
tree342e2cbbd53e9d0290d334af52d4e2e7c75b24d0
parent89e54338d0def03d7bf682a3d401d55fe566313f (diff)
downloadcpython-ce5179fcbab40df1bf0a74a9ebf96cc7c1e061b3.zip
cpython-ce5179fcbab40df1bf0a74a9ebf96cc7c1e061b3.tar.gz
cpython-ce5179fcbab40df1bf0a74a9ebf96cc7c1e061b3.tar.bz2
Issue #23601: Use small object allocator for dict key objects
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/dictobject.c6
2 files changed, 6 insertions, 3 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index aac1bad..a182887 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -18,6 +18,9 @@ Core and Builtins
by external AST optimizers, but the compiler does not emit directly such
node.
+- Issue #23601: Sped-up allocation of dict key objects by using Python's
+ small object allocator. (Contributed by Julian Taylor.)
+
- Issue #18018: Import raises ImportError instead of SystemError if a relative
import is attempted without a known parent package.
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index f6a98b4..31a6322 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -324,7 +324,7 @@ static PyDictKeysObject *new_keys_object(Py_ssize_t size)
assert(size >= PyDict_MINSIZE_SPLIT);
assert(IS_POWER_OF_2(size));
- dk = PyMem_MALLOC(sizeof(PyDictKeysObject) +
+ dk = PyObject_MALLOC(sizeof(PyDictKeysObject) +
sizeof(PyDictKeyEntry) * (size-1));
if (dk == NULL) {
PyErr_NoMemory();
@@ -353,7 +353,7 @@ free_keys_object(PyDictKeysObject *keys)
Py_XDECREF(entries[i].me_key);
Py_XDECREF(entries[i].me_value);
}
- PyMem_FREE(keys);
+ PyObject_FREE(keys);
}
#define new_values(size) PyMem_NEW(PyObject *, size)
@@ -964,7 +964,7 @@ dictresize(PyDictObject *mp, Py_ssize_t minused)
}
}
assert(oldkeys->dk_refcnt == 1);
- DK_DEBUG_DECREF PyMem_FREE(oldkeys);
+ DK_DEBUG_DECREF PyObject_FREE(oldkeys);
}
return 0;
}