diff options
author | Raymond Hettinger <python@rcn.com> | 2016-01-31 16:56:21 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2016-01-31 16:56:21 (GMT) |
commit | ce5179fcbab40df1bf0a74a9ebf96cc7c1e061b3 (patch) | |
tree | 342e2cbbd53e9d0290d334af52d4e2e7c75b24d0 | |
parent | 89e54338d0def03d7bf682a3d401d55fe566313f (diff) | |
download | cpython-ce5179fcbab40df1bf0a74a9ebf96cc7c1e061b3.zip cpython-ce5179fcbab40df1bf0a74a9ebf96cc7c1e061b3.tar.gz cpython-ce5179fcbab40df1bf0a74a9ebf96cc7c1e061b3.tar.bz2 |
Issue #23601: Use small object allocator for dict key objects
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/dictobject.c | 6 |
2 files changed, 6 insertions, 3 deletions
@@ -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; } |