• lua_State数据结构


    lua_State

    线程相关脚本上下文
    主要包括当前脚本环境的运行状态信息,还会有gc相关的信息。

    global_State 全局信息

    // global_State 的主要字段
    typedef struct global_State {
        stringtable strt; // hash table for strings 全局字符串的哈希表
        TValue l_registry;  // 对应LUA_REGISTRYINDEX的全局table
        Tstring *tmname[TM_N]; // 元方法的名称字符串
        Table *mt[NUM_TAGS];  // 基本类型的元表
    } global_State;
    
    

    lua_State

    #typedef TValue *StkId;
    
    struct lua_State {
        CommonHeader;
        lu_byte status;              // 线程脚本的状态
        StkId top;                   // 指向当前线程栈的栈顶指针
        StkId base;                  // 指向当前函数运行的相对基位置
        global_State *l_G;           // 指向global_State
        CallInfo *ci;                // 当前线程运行的函数调用信息
        const Instruction * savedpc; // 函数调用前,记录上一个函数的pc位置
        StkId stack_last;            // 栈的实际最后一个位置
        StkId stack;                 // 栈底
        CallInfo *end_ci;            // 指向函数调用栈的栈顶
        CallInfo *base_ci;           // 指向函数调用栈的栈底
        int stacksize;               // 栈的大小
        int size_ci;                 // 函数调用栈的大小
        unsigned short nCcalls;      // 当前C函数的调用的深度
        unsigned short baseCcalls;   // 用于记录每个线程状态的C函数调用深度的辅助成员
        lu_byte hookmask;            // 支持那些hook能力
        lu_byte allowhook;           // 是否运行hook
        int basehookcount;           // 用户设置的执行指令数(在hookmask=LUA_MASK_COUNT生效)
        int hookcount;               // 运行时,跑了多少条指令
        lua_Hook hook;               // 用户注册的hook回调函数
        TValue l_gt;                 // 当前线程的全局环境表
        TValue env;                  // 当前运行的环境表
        GCObject *openupval;         // 用于gc
        GCObject *gclist;            // 用于gc
        struct lua_longjmp *errorJmp; // 发生错误的长跳转位置
        ptrdiff_t errfunc;            // 发生错误的回调函数
    }
    
    

    作者:Ron Ngai
    出处:http://rondsny.github.io
    关于作者:断码码农一枚。
    欢迎转载,但未经作者同意须在文章页面明显位置给出原文连接
    如有问题,可以通过rondsny#gmail.com 联系我,非常感谢。

  • 相关阅读:
    iframe上下传递对象方法
    Chrome Console 基本调试方法
    javascript 获取div长度和宽度
    Python with语句用法
    KVM -> 虚拟机在线热添加技术_04
    查看系统日志的实用操作
    2018-11-3& maven
    Gitlab & Github
    Git详解
    Jenkins与代码上线解决方案
  • 原文地址:https://www.cnblogs.com/rond/p/15147116.html
Copyright © 2020-2023  润新知