Выделение объектов на куче¶
-
PyObject *
_PyObject_New
(PyTypeObject *type)¶ - Return value: New reference.
-
PyVarObject *
_PyObject_NewVar
(PyTypeObject *type, Py_ssize_t size)¶ - Return value: New reference.
-
PyObject *
PyObject_Init
(PyObject *op, PyTypeObject *type)¶ - Return value: Borrowed reference. Part of the Stable ABI.
Инициализировать вновь выделенный объект op с его типом и начальной ссылкой. Возвращает инициализированный объект. Если type указывает, что объект участвует в циклическом детекторе мусора, он добавляется в набор наблюдаемых объектов детектора. Другие поля объекта не затрагиваются.
-
PyVarObject *
PyObject_InitVar
(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶ - Return value: Borrowed reference. Part of the Stable ABI.
Это делает все, что делает
PyObject_Init()
, а также инициализирует информацию о длине для объекта переменного размера.
-
TYPE *
PyObject_New
(TYPE, PyTypeObject *type)¶ - Return value: New reference.
Выделите новый объект Python, используя тип структуры C TYPE и объект типа Python type. Поля, не определенные заголовком объекта Python, не инициализируются; количество ссылок объекта будет равно единице. Размер выделяемой памяти определяется по полю
tp_basicsize
объекта type.
-
TYPE *
PyObject_NewVar
(TYPE, PyTypeObject *type, Py_ssize_t size)¶ - Return value: New reference.
Выделите новый объект Python, используя тип структуры C TYPE и объект типа Python type. Поля, не определенные заголовком объекта Python, не инициализируются. Выделенная память позволяет использовать структуру TYPE плюс поля size размера, заданного полем
tp_itemsize
в type. Это полезно для реализации объектов типа кортежей, которые могут определять свой размер во время конструирования. Встраивание массива полей в одно выделение уменьшает количество выделений, повышая эффективность управления памятью.
-
void
PyObject_Del
(void *op)¶ Освобождает память, выделенную объекту с помощью
PyObject_New()
илиPyObject_NewVar()
. Обычно это вызывается из обработчикаtp_dealloc
, указанного в типе объекта. После этого вызова нельзя обращаться к полям объекта, так как память больше не является действительным объектом Python.
-
PyObject
_Py_NoneStruct
¶ Объект, который виден в Python как
None
. Доступ к нему должен осуществляться только с помощью макросаPy_None
, который оценивается как указатель на этот объект.
См.также
PyModule_Create()
Выделение и создание модулей расширения.