字节码和虚拟机
Python中的伪码PyCodeObject
typedef struct {
PyObject_HEAD
int co_argcount; // co_argcount 参数,不包括不定参数
int co_nlocals; // co_nlocals 变量个数,co_argcount +
// 可变参数个数 + co_kwonlyargcount(py3.0) + 局部变量个数
int co_stacksize; // 栈的大小 (编译后需要的最大栈深度)
int co_flags; // PyCodeObject的一些标志位,用来优化运行时的性能
PyObject *co_code; // 编译后的字节码字符串
PyObject *co_consts; // 常量的列表
PyObject *co_names; // 常量中的字符串对象
PyObject *co_varnames; // 变量名字的元组
PyObject *co_freevars; // 自由变量的元组
PyObject *co_cellvars; // cell变量的元组
/* The rest doesn't count for hash/cmp */
PyObject *co_filename; // 文件名
PyObject *co_name; // 对象的名字,例如函数的名字、类的名字等
int co_firstlineno; // 对应的代码在源码文件中的起始行号
PyObject *co_lnotab; // 伪码与行号的映射
void *co_zombieframe; // 对于一些特殊情况下的优化
PyObject *co_weakreflist; // 支持弱引用
} PyCodeObject;PyCodeObject的示例
PyFrameObject



Python执行字节码



最后更新于