PyCodeObject
本文参考的是 3.8.0a0 版本的代码,详见 cpython 源码分析 基本篇
以后都在 github 更新,请参考 详解 python code
在编译好的 c 程序里面,code object 可以理解成一段二进制的数据,每一个字节都有与之对应的机器指令,Program Counter 在对应的程序的代码段上,按照顺序执行机器指令,这个程序就能按照作者的意图去运行
在 Python 里也有对应的代码段,但由于 python 的指令是基于 python 虚拟机的指令,而不是真正的机器指令,这些指令也有对应的二进制表示方式,比如执行某个函数的时候,python 虚拟机装载对应函数的 PyCodeObject,从这个 PyCodeObject 里面找到虚拟机指令,并逐条执行
PyCodeObject 的 memory layout 如下所示
由图所示,PyCode