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;            // 发生错误的回调函数
}

posted on 2021-08-16 12:09  Ron Ngai  阅读(495)  评论(0编辑  收藏  举报

导航