Размещение объектов в куче

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

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

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

Это делает все, что делает c:func:PyObject_Init, а также инициализирует информацию о длине для объекта переменного размера.

PyObject_New(TYPE, typeobj)

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

PyObject_NewVar(TYPE, typeobj, size)

Выделите новый объект Python, используя структурный тип C TYPE и объект типа Python typeobj (PyTypeObject*). Поля, не определенные заголовком объекта Python, не инициализируются. Выделенная память позволяет использовать структуру TYPE и размер* (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()

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

Вернуться на верх