mirror of
https://github.com/python/cpython.git
synced 2025-08-01 23:53:15 +00:00

- Add alignment requirement
- Mention that ob_size is unreliable if you don't control it
- Add some links for context
- basicsize should include the base type in generaly not just PyObject
- suggest Py_SIZE & Py_SET_SIZE
This adds a “by-the-way” link to `PyObject_New`, which shouldn't be
used for GC types. In order to be comfortable linking to it, I also
add a link to `PyObject_GC_New` from its docs. And the same for
`*Var` variants, while I'm here.
(cherry picked from commit ad0f618ab3
)
Co-authored-by: Petr Viktorin <encukou@gmail.com>
81 lines
2.8 KiB
ReStructuredText
81 lines
2.8 KiB
ReStructuredText
.. highlight:: c
|
|
|
|
.. _allocating-objects:
|
|
|
|
Allocating Objects on the Heap
|
|
==============================
|
|
|
|
|
|
.. c:function:: PyObject* _PyObject_New(PyTypeObject *type)
|
|
|
|
|
|
.. c:function:: PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
|
|
|
|
|
|
.. c:function:: PyObject* PyObject_Init(PyObject *op, PyTypeObject *type)
|
|
|
|
Initialize a newly allocated object *op* with its type and initial
|
|
reference. Returns the initialized object. Other fields of the object are
|
|
not affected.
|
|
|
|
|
|
.. c:function:: PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
|
|
|
|
This does everything :c:func:`PyObject_Init` does, and also initializes the
|
|
length information for a variable-size object.
|
|
|
|
|
|
.. c:macro:: PyObject_New(TYPE, typeobj)
|
|
|
|
Allocate a new Python object using the C structure type *TYPE*
|
|
and the Python type object *typeobj* (``PyTypeObject*``).
|
|
Fields not defined by the Python object header are not initialized.
|
|
The caller will own the only reference to the object
|
|
(i.e. its reference count will be one).
|
|
The size of the memory allocation is determined from the
|
|
:c:member:`~PyTypeObject.tp_basicsize` field of the type object.
|
|
|
|
Note that this function is unsuitable if *typeobj* has
|
|
:c:macro:`Py_TPFLAGS_HAVE_GC` set. For such objects,
|
|
use :c:func:`PyObject_GC_New` instead.
|
|
|
|
|
|
.. c:macro:: PyObject_NewVar(TYPE, typeobj, size)
|
|
|
|
Allocate a new Python object using the C structure type *TYPE* and the
|
|
Python type object *typeobj* (``PyTypeObject*``).
|
|
Fields not defined by the Python object header
|
|
are not initialized. The allocated memory allows for the *TYPE* structure
|
|
plus *size* (``Py_ssize_t``) fields of the size
|
|
given by the :c:member:`~PyTypeObject.tp_itemsize` field of
|
|
*typeobj*. This is useful for implementing objects like tuples, which are
|
|
able to determine their size at construction time. Embedding the array of
|
|
fields into the same allocation decreases the number of allocations,
|
|
improving the memory management efficiency.
|
|
|
|
Note that this function is unsuitable if *typeobj* has
|
|
:c:macro:`Py_TPFLAGS_HAVE_GC` set. For such objects,
|
|
use :c:func:`PyObject_GC_NewVar` instead.
|
|
|
|
|
|
.. c:function:: void PyObject_Del(void *op)
|
|
|
|
Releases memory allocated to an object using :c:macro:`PyObject_New` or
|
|
:c:macro:`PyObject_NewVar`. This is normally called from the
|
|
:c:member:`~PyTypeObject.tp_dealloc` handler specified in the object's type. The fields of
|
|
the object should not be accessed after this call as the memory is no
|
|
longer a valid Python object.
|
|
|
|
|
|
.. c:var:: PyObject _Py_NoneStruct
|
|
|
|
Object which is visible in Python as ``None``. This should only be accessed
|
|
using the :c:macro:`Py_None` macro, which evaluates to a pointer to this
|
|
object.
|
|
|
|
|
|
.. seealso::
|
|
|
|
:c:func:`PyModule_Create`
|
|
To allocate and create extension modules.
|
|
|