zoukankan      html  css  js  c++  java
  • Lua虚拟机中的数据结构与栈

    Lua虚拟机中的数据结构与栈

    来源 https://blog.csdn.net/zry112233/article/details/80828327

    由上一篇文章可知解释器分析Lua文件之后生成Proto结构体,最后到luaV_execute函数中依次取出指令来执行。

    每个lua虚拟机对应一个lua_State结构体,它使用TValue数组来模拟栈,主要包括与栈相关的成员:

    • stack:栈数组的起始位置
    • base:当前函数栈的基地址
    • top:当前栈的下一个可用位置

    这些成员的初始化操作在stack_init函数中完成。

    lua_State里面存放的是一个Lua虚拟机的全局状态,当执行到一个函数时,需要有对应的数据结构来表示函数相关的信息,这个数据结构就是CallInfo,这个结构中同样有top、base这两个与栈相关的成员。

    在lua_State 中,有一个base_ci的CallInfo数组,存储的就是CallInfo的信息。而另一个ci成员指向的就是当前函数的CallInfo指针。

    在函数调用前会先调用luaD_precall函数,主要完成如下操作:

    1. 保存当前虚拟机执行的指令savedpc到当前CallInfo的savedpc中。用于后面调用完毕之后恢复执行
    2. 分别计算出待调用函数的base、top值,这些值的计算依赖于函数的参数数量
    3. 从lua_State的base_ci数组中分配一个新的CallInfo指针,存储前面两步计算出来的信息,切换到这个函数中准备调用

    ========== End

  • 相关阅读:
    清北学堂2019.7.18 & 清北学堂2019.7.19
    清北学堂2019.7.17
    清北学堂2019.7.16
    清北学堂2019.7.15
    清北学堂2019.7.14
    清北学堂2019.7.13
    【洛谷P1383 高级打字机】
    考试整理
    考试整理
    【洛谷P5018 对称二叉树】
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/11157815.html
Copyright © 2011-2022 走看看