Размещение объектов в куче
-
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.
Инициализировать вновь выделенный объект op с его типом и начальной ссылкой. Возвращает инициализированный объект. Если type указывает, что объект участвует в циклическом детекторе мусора, он добавляется в множество наблюдаемых объектов детектора. Остальные поля объекта не затрагиваются.
-
PyVarObject*
PyObject_InitVar
(PyVarObject *op, PyTypeObject *type, Py_ssize_t size) - Return value: Borrowed reference.
Делает всё, что делает
PyObject_Init()
, а также инициализирует информацию о длине для объекта переменного размера.
-
TYPE*
PyObject_New
(TYPE, PyTypeObject *type) - Return value: New reference.
Выделить новый объект Python, используя тип структуры C TYPE и объект типа Python type. Поля, не определенные заголовком объекта Python, не инициализируются; счётчик ссылок на объект будет равен единице. Размер выделения памяти определяется из поля
tp_basicsize
объекта типа.
-
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()
- Выделить и создать модули расширения.