Spec-Zone.ru › Python 3.13

Выделение объектов в куче

PyObject *_PyObject_New(PyTypeObject *type)
Значение возврата: Новая ссылка.
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Значение возврата: Новая ссылка.
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
Значение возврата: Заимствованная ссылка. Часть Стабильной ABI.

Инициализирует только что выделенный объект op своим типом и начальной ссылкой. Возвращает инициализированный объект. Другие поля объекта не затрагиваются.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Значение возврата: Заимствованная ссылка. Часть Стабильной ABI.

Выполняет все действия, выполняемые PyObject_Init(), а также инициализирует информацию о длине для объекта переменного размера.

PyObject_New(TYPE, typeobj)

Выделяет новый Python-объект, используя структуру C типа TYPE и объект типа Python typeobj (PyTypeObject*). Поля, не определённые заголовком Python-объекта, не инициализируются. Вызывающий код владеет единственной ссылкой на объект (т. е. его счётчик ссылок будет равен единице). Размер выделения памяти определяется полем tp_basicsize объекта типа.

PyObject_NewVar(TYPE, typeobj, size)

Выделяет новый Python-объект, используя структуру C типа TYPE и объект типа Python typeobj (PyTypeObject*). Поля, не определённые заголовком Python-объекта, не инициализируются. Выделенная память позволяет использовать структуру TYPE плюс size (Py_ssize_t) полей размера, заданного полем tp_itemsize объекта typeobj. Это полезно для реализации объектов, таких как кортежи, которые способны определять свой размер при создании. Встраивание массива полей в то же выделение уменьшает количество выделений, улучшая эффективность управления памятью.

void PyObject_Del(void *op)

Освобождает память, выделенную объекту с помощью PyObject_New или PyObject_NewVar. Обычно это вызывается обработчиком tp_dealloc, указанным в типе объекта. После этого вызова к полям объекта нельзя обращаться, так как память больше не является допустимым Python-объектом.

PyObject _Py_NoneStruct

Объект, видимый в Python как None. К нему следует обращаться только с помощью макроса Py_None, который возвращает указатель на этот объект.

См. также

PyModule_Create()

Для выделения и создания модулей расширения.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/allocation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API