> Exactly, which is a bit a bummer. Considering Python provides 3 > different memory allocator, it'd be great if there was some ability to > be sure that PyObject_Malloc pointer are actually PyObject, not > Py_GC_HEAD.
The allocators are specialized based on the allocation strategy and efficiency, not based on what are you going to use the memory for. If you want to allocate a buffer using the object allocation strategy because <insert reason> then nobody is preventing you to use PyObject_Malloc(). Even if we sanitize the whole stdlib to be conforming to "only objects are allocated using PyObejct_Malloc()", 3rd party extension modules and other bests can do whatever, so you can still crash if you decide to interpreter the output as an object. On Fri, 15 Jan 2021 at 08:43, Julien Danjou <jul...@danjou.info> wrote: > On Thu, Jan 14 2021, Tim Peters wrote: > > > I'm not clear on exactly what it is you're after, but CPython faces > > the same question all the time: _given_ a pointer to an object, is > > there, or is there not, a GC header prepended? That's answered by > > this C API function: > > > > """ > > int PyObject_IS_GC(PyObject *obj) > > > > Returns non-zero if the object implements the garbage collector > > protocol, otherwise returns 0. > > > > The object cannot be tracked by the garbage collector if this function > > returns 0. > > """ > > > > FYI, the implementation usually resolves it by looking at whether > > obj's type object has the Py_TPFLAGS_HAVE_GC flag set. > > Right, but that only works if you have the PyObject address. > If you all got is a pointer returned by PyObject_Malloc(), you don't > know if the PyObject is at this pointer address, or after the PyGC_HEAD > header that is prepended. :( > > -- > Julien Danjou > /* Free Software hacker > https://julien.danjou.info */ > _______________________________________________ > Python-Dev mailing list -- python-dev@python.org > To unsubscribe send an email to python-dev-le...@python.org > https://mail.python.org/mailman3/lists/python-dev.python.org/ > Message archived at > https://mail.python.org/archives/list/python-dev@python.org/message/Z6GJUNKOFE2IN6EKQKDBBMX4SUZ36ITU/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/KIBIVCKSXVE77YE3PWPPK7QPBAFQFMOU/ Code of Conduct: http://python.org/psf/codeofconduct/