Spec-Zone.ru › Python 3.8

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

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

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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/c-api/allocation.html

Spec-Zone.ru

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