From: Neil Schemenauer Date: Thu, 12 Jan 2023 18:03:50 +0000 (-0800) Subject: GH-81381: Add longer comment _PyType_AllocNoTrack() (GH-100954) X-Git-Tag: v3.12.0a5~197 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c549fcccbbcf6cbf7db3da928a09e81e2c8bc7f3;p=thirdparty%2FPython%2Fcpython.git GH-81381: Add longer comment _PyType_AllocNoTrack() (GH-100954) The details on the "nitems+1" expression is a bit subtle so add a longer comment about it. --- diff --git a/Objects/typeobject.c b/Objects/typeobject.c index e4da5b24006d..59e0bf2995ba 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -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);