mirror of https://github.com/python/cpython
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:
parent
2161bbf243
commit
c549fcccbb
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue