ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

lua_State数据结构

2021-08-16 12:34:46  阅读:115  来源: 互联网

标签:StkId global 函数调用 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;            // 发生错误的回调函数
}

标签:StkId,global,函数调用,lua,State,线程,数据结构
来源: https://www.cnblogs.com/rond/p/15147116.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有