]> granicus.if.org Git - python/commitdiff
Issue #23601: Use small object allocator for dict key objects
authorRaymond Hettinger <python@rcn.com>
Sun, 31 Jan 2016 16:56:21 +0000 (08:56 -0800)
committerRaymond Hettinger <python@rcn.com>
Sun, 31 Jan 2016 16:56:21 +0000 (08:56 -0800)
Misc/NEWS
Objects/dictobject.c

index aac1badc713230b1618284d8d6b06c4401e0f10a..a182887f715e57a5f28e550a7ac80443e360b5fa 100644 (file)
--- 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.
 
index f6a98b4b02e4cf29e6d8d824c6dcb299d0430877..31a6322a4f9ea5e33f6dd941de8e252397987ab2 100644 (file)
@@ -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;
 }