Spec-Zone.ru › Python 3.10

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

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

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

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

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

TYPE *PyObject_New(TYPE, PyTypeObject *type)
Значение возврата: Новая ссылка.

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

TYPE *PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
Значение возврата: Новая ссылка.

Выделяет новый 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()

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

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

Spec-Zone.ru

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