当前位置:   article > 正文

Python的运行机制--操作码(opcode)解析

Python的运行机制--操作码(opcode)解析
上一篇文章《Python的运行机制--pyc文件浅析》中已经对Python的运行单元PyCodeObject结构体作了初步的了解,但是要真正理解Python的运行机制,
还要通过分析Python的opcode才行。opcode的解释执行通过ceval.c中的以下函数:


PyObject *PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)


来实现,所以这个函数是研究opcode的重点,对于opcode有什么不明白的地方都可以通过这个函数中相应的opcode处理过程来得到解答。


在开始分析opcode之前,还是有必要先了解一下一个PyFrameObject这个数据结构:

  1. typedef struct _frame {
  2. PyObject_VAR_HEAD
  3. struct _frame *f_back; /* previous frame, or NULL */
  4. PyCodeObject *f_code; /* code segment */
  5. PyObject *f_builtins; /* builtin symbol table (PyDictObject) */
  6. PyObject *f_globals; /* global symbol table (PyDictObject) */
  7. PyObject *f_locals; /* local symbol table (any mapping) */
  8. PyObject **f_valuestack; /* points after the last local */
  9. /* Next free slot in f_valuestack. Frame creation sets to f_valuestack.
  10. Frame evaluation usually NULLs it, but a frame that yields sets it
  11. to the current stack top. */
  12. PyObject **f_stacktop;
  13. PyObject *f_trace; /* Trace function */
  14. /* If an exception is raised in this frame, the next three are used to
  15. * record the exception info (if any) originally in the thread state. See
  16. * comments before set_exc_info() -- it's not obvious.
  17. * Invariant: if _type is NULL, then so are _
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/199271
推荐阅读
相关标签
  

闽ICP备14008679号