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

PyObject *_PyObject_New(PyTypeObject *type)
Return value: New reference.
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Return value: New reference.
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
Return value: Borrowed reference. Part of the Stable ABI.

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

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Return value: Borrowed reference. Part of the Stable ABI.

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

TYPE *PyObject_New(TYPE, PyTypeObject *type)
Return value: New reference.

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

TYPE *PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
Return value: New reference.

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

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

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