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.
This commit is contained in:
Neil Schemenauer 2023-01-12 10:03:50 -08:00 committed by GitHub
parent 2161bbf243
commit c549fcccbb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 1 deletions

View File

@ -1289,8 +1289,13 @@ PyObject *
_PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems) _PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems)
{ {
PyObject *obj; 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); 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); const size_t presize = _PyType_PreHeaderSize(type);
char *alloc = PyObject_Malloc(size + presize); char *alloc = PyObject_Malloc(size + presize);