0. 背景
之前介绍了Python垃圾回收的简介,它简要介绍了三种垃圾回收器:引用计数回收器,标记清除回收器和世代回收器,这里会给出Python中基础类型在C语言中的内存模型,以帮助我们理解下一节三种垃圾回收器结合使用流程。
1. Python对象内存模型
首先介绍一下Python对象的内存模型,如下图1所示:
图1. PyObject对象内存模型
上图可以看到,一个PyObject必须包含ob_refcnt
和ob_type
。ob_refcnt
是这个对象的引用计数,而ob_type
则是指向_typeobject
结构体的指针,它是Python内部的一种特殊对象,它是用来制定一个对象类型的类型对象,所以上图中它指向了一个PyTypeObject
。
在PyTypeObject中定义了大量的函数指针,这些函数指针最终都会指向某个函数,或者指向NULL。这些函数指针可以视为类型对象中所定义的操作,而这些操作直接决定着一个对象在运行时所表现出的行为。