Распределение объектов в куче¶
-
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, используя тип TYPE структуры C, и тип Python возражают type. Поля, не определенные заголовком объекта Python, не инициализируются; число ссылок объекта будет равно единице. Размер выделения памяти определяется из поля
tp_basicsize
объекта типа.
-
TYPE*
PyObject_NewVar
(TYPE, PyTypeObject *type, Py_ssize_t size)¶ - Return value: New reference.
Аллокация нового объекта Python, используя тип TYPE структуры C, и Python тип объекта type. Поля, не определенные заголовком объекта Python, не инициализируются. Аллоцированная память позволяет использовать структуру TYPE плюс size поля размера, заданного полем
tp_itemsize
type. Это полезно для реализации таких объектов, как кортежи, которые способны определять их размер во время строительства. Встраивание массива полей в одно и то же распределение уменьшает количество аллокаций, повышая эффективность управления памятью.
-
void
PyObject_Del
(void *op)¶ Освобождает память, аллоцированную объекту с помощью
PyObject_New()
илиPyObject_NewVar()
. Обычно он вызывается изtp_dealloc
обработчика, указанного в типе объекта. После этого вызова доступ к полям объекта невозможен, поскольку память больше не является допустимым объектом Python.
См.также
PyModule_Create()
- Аллокация и создание модулей расширения.