]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-81381: Add longer comment _PyType_AllocNoTrack() (GH-100954)
authorNeil Schemenauer <nas-github@arctrix.com>
Thu, 12 Jan 2023 18:03:50 +0000 (10:03 -0800)
committerGitHub <noreply@github.com>
Thu, 12 Jan 2023 18:03:50 +0000 (10:03 -0800)
The details on the "nitems+1" expression is a bit subtle so add a longer
comment about it.

Objects/typeobject.c

index e4da5b24006dd9ccfdafad8063fee1528b2e10ef..59e0bf2995bac22beb7d8f6f2bb782d7cf853157 100644 (file)
@@ -1289,8 +1289,13 @@ PyObject *
 _PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems)
 {
     PyObject *obj;
+    /* The +1 on nitems is needed for most types but not all. We could save a
+     * bit of space by allocating one less item in certain cases, depending on
+     * the type. However, given the extra complexity (e.g. an additional type
+     * flag to indicate when that is safe) it does not seem worth the memory
+     * savings. An example type that doesn't need the +1 is a subclass of
+     * tuple. See GH-100659 and GH-81381. */
     const size_t size = _PyObject_VAR_SIZE(type, nitems+1);
-    /* note that we need to add one, for the sentinel */
 
     const size_t presize = _PyType_PreHeaderSize(type);
     char *alloc = PyObject_Malloc(size + presize);