> 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 2021年1月15日 at 08:43, Julien Danjou <[email protected]> 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 -- [email protected] > To unsubscribe send an email to [email protected] > https://mail.python.org/mailman3/lists/python-dev.python.org/ > Message archived at > https://mail.python.org/archives/list/[email protected]/message/Z6GJUNKOFE2IN6EKQKDBBMX4SUZ36ITU/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-Dev mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/[email protected]/message/KIBIVCKSXVE77YE3PWPPK7QPBAFQFMOU/ Code of Conduct: http://python.org/psf/codeofconduct/