CPython
// Include/pytypedefs.h
typedef struct _object PyObject;
// Include/object.h
// 这个也就是 python 代码里的 object
// 简化后(主要是去掉了不必要的跨平台的宏, 仅考虑linux x86_64)
struct _object {
union {
Py_ssize_t ob_refcnt; // Py_ssize_t 是指 64 位整数
Py_UINT32_T ob_refcnt_split[2];
};
PyTypeObject *ob_type;
}
// 很多变长对象的实现会在 PyObject 的基础上增加一个属性
typedef struct {
PyObject ob_base;
Py_ssize_t ob_size;
} PyVarObject;
// 以下两个宏很常见
#define PyObject_HEAD PyObject ob_base;
#define PyObject_VAR_HEAD PyVarObject ob_base;
// 例如, python 中的浮点数的实现是用 double 来实现的
// Include/cpython/floatobject.h
typedef struct {
PyObject_HEAD
double ob_fval;
} PyFloatObject;Last updated