在堆对象实现支持上分配对象(Python教程)(参考资料)
在堆上分配对象
- 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.
使用C结构类型TYPE和thePython类型对象type。没有初始化Python对象headerare定义的字段;对象的引用计数为1。内存分配的大小由类型对象的
tp_basicsize
字段决定.
- TYPE*
PyObject_NewVar
( TYPE,PyTypeObject *type,Py_ssize_t size) - Return value: New reference.
使用C结构类型TYPE和thePython类型对象type分配一个新的Python对象。未初始化Python对象headerare未定义的字段。分配的内存允许TYPE structureplus size字段的大小由
tp_itemsize
的type字段给出。这对于实现像元组这样的对象很有用,这些对象可以在构造时确定它们的大小。将数组offields嵌入到同一个分配中会减少分配数量,提高内存管理效率.
- void
PyObject_Del
( PyObject *op) - 使用
PyObject_New()
或PyObject_NewVar()
释放分配给对象的内存。这通常叫tp_dealloc
在对象的类型中指定的处理程序。在此调用之后不应访问该对象的字段,因为内存不再是有效的Python对象.
- PyObject
_Py_NoneStruct
- 在Python中可见的对象
None
。这只能用Py_None
宏,它计算指向thisobject的指针.
也可以看看
PyModule_Create()
- 分配和创建扩展模块.
评论被关闭。