Spec-Zone.ru › Python 3.12

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

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(), а также инициализирует информацию о длине для объекта переменной длины.

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.12/c-api/allocation.html

Spec-Zone.ru

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