PyFrameObject
本文参考的是 3.8.0a0 版本的代码,详见 cpython 源码分析 基本篇
以后都在 github 更新,请参考 图解 python frame
frame
一个 c 文件会被编译器最终转换成二进制文件,这个二进制文件文件里面的指令是 cpu 指令,具体的指令内容因 cpu 而异,一般的编译器过程会把源代码转换成中间结构(IR), 同样的程序在不同的机器上可以转换成同样的IR,不同的机器可以根据同样的IR生成不同的cpu指令
一个 py 文件会被 编译器/解释器 转换成二进制文件,这个二进制文件里面的内容是 python 虚拟机的指令,在我当前的版本中(3.8.0a0) 总共有 121 条不同的虚拟机指令,这个指令并不是 cpu 指令,而是 python 虚拟机指令,需要借助 python 解释器读取一条一条的指令,再执行这个指令对应的部分,上面介绍的 Ceval 对应的就是这部分的功能
对于 c 程序,调用函数的时候会有一个 stack frame, 维基百科<