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   Ron Ngai  阅读(508)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2019-08-16 mysql row size上限

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示