Spec-Zone.ru › Python 3.11

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

PyObject *_PyObject_New(PyTypeObject *type)
Возвращаемое значение: Новый ссылка.
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Возвращаемое значение: Новый ссылка.
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
Возвращаемое значение: Ссылка-привязка. Часть Стабильного АПИ.

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

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Возвращаемое значение: Ссылка-привязка. Часть Стабильного АПИ.

Выполняет все, что делает 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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/c-api/allocation.html

Spec-Zone.ru

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