在 heap 上分配物件¶
- PyObject*_PyObject_New(PyTypeObject*type)¶
- 回傳值:新的參照。
- PyVarObject*_PyObject_NewVar(PyTypeObject*type,Py_ssize_tsize)¶
- 回傳值:新的參照。
- PyObject*PyObject_Init(PyObject*op,PyTypeObject*type)¶
- 回傳值:借用參照。 為穩定 ABI 的一部分.
用它的型別和初始參照來初始化新分配物件op。已初始化的物件會被回傳。物件的其他欄位不受影響。
- PyVarObject*PyObject_InitVar(PyVarObject*op,PyTypeObject*type,Py_ssize_tsize)¶
- 回傳值:借用參照。 為穩定 ABI 的一部分.
它會做到
PyObject_Init()
的所有功能,並且會初始化一個大小可變物件的長度資訊。
- PyObject_New(TYPE,typeobj)¶
使用 C 結構型別TYPE 和 Python 型別物件typeobj (
PyTypeObject*
) 分配一個新的 Python 物件。未在該 Python 物件標頭 (header) 中定義的欄位不會被初始化;呼叫者會擁有那個對於物件的唯一參照(物件的參照計數為一)。記憶體分配大小由 type 物件的tp_basicsize
欄位來指定。Note that this function is unsuitable iftypeobj has
Py_TPFLAGS_HAVE_GC
set. For such objects,usePyObject_GC_New()
instead.
- PyObject_NewVar(TYPE,typeobj,size)¶
使用 C 的結構型別TYPE 和 Python 的型別物件typeobj (
PyTypeObject*
) 分配一個新的 Python 物件。未在該 Python 物件標頭中定義的欄位不會被初始化。記憶體空間預留了TYPE 結構大小再加上typeobj 物件中tp_itemsize
欄位提供的size (Py_ssize_t
) 欄位的值。這對於實現如 tuple 這種能夠在建立期間決定自己大小的物件是很實用的。將欄位的陣列嵌入到相同的記憶體分配中可以減少記憶體分配的次數,這提高了記憶體管理的效率。Note that this function is unsuitable iftypeobj has
Py_TPFLAGS_HAVE_GC
set. For such objects,usePyObject_GC_NewVar()
instead.
- voidPyObject_Del(void*op)¶
釋放由
PyObject_New
或者PyObject_NewVar
分配給物件的記憶體。這通常是在物件型別所指定的tp_dealloc
handler 中呼叫。呼叫這個函式以後,物件的各欄位都不可以被存取,因為原本分配的記憶體已不再是一個有效的 Python 物件。
也參考
PyModule_Create()
分配記憶體和建立擴充模組。