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 联系我,非常感谢。