-
从0到1抖音运营变现手册大全:详解协程及函数执行
资源介绍
电田 第六章 协程及函数的执行
由 #define G(L) (L->l_G)
忽略 畬畳畴畡畴略甮畨 中涉及 畧畣 的复杂部分,我们可以先看一眼 畬畵畡 畓畴畡畴略 的数据结构。
源代码 甶甮由町 畬畳畴畡畴略甮畨町 畬畵畡 畓畴畡畴略
由电甴 struct lua_State {
由电电 CommonHeader;
由电甶 lu_byte status;
由电男 StkId top; /* first free slot in the stack */
由电甸 global_State *l_G;
由电甹 CallInfo *ci; /* call info for current function */
由甶田 const Instruction *oldpc; /* last pc traced */
由甶由 StkId stack_last; /* last free slot in the stack */
由甶甲 StkId stack; /* stack base */
由甶申 int stacksize;
由甶甴 unsigned short nny; /* number of non -yieldable calls in stack */
由甶电 unsigned short nCcalls; /* number of nested C calls */
由甶甶 lu_byte hookmask;
由甶男 lu_byte allowhook;
由甶甸 int basehookcount;
由甶甹 int hookcount;
由男田 lua_Hook hook;
由男由 GCObject *openupval; /* list of open upvalues in this stack */
由男甲 GCObject *gclist;
由男申 struct lua_longjmp *errorJmp; /* current error recover point */
由男甴 ptrdiff_t errfunc; /* current error handling function (stack index) */
由男电 CallInfo base_ci; /* CallInfo for first level (C calling Lua) */
由男甶 };
这个数据结构是围绕程序如何执行来设计的,数据栈之外的数据储存并不体现在这个结构中。在 界畵畡 源
代码的其它部分,经常会用到 畬畵畡 畓畴畡畴略 ,但不是所有代码都需要了解结构的细节。一般提到这类数据的地
方,都用变量名 界 来指代它。
接下来,我们来分析 畬畵畡 畓畴畡畴略 中重要的两个数据结构:数据栈和调用链。
6.1.1 数据栈
界畵畡 中的数据可以这样分为两类:值类型和引用类型。值类型可以被任意复制,而引用类型共享一份数
据,由 畇畃 负责维护生命期。界畵畡 使用一个联合 畵畮畩畯畮 畖畡畬畵略 来保存数据。
源代码 甶甮甲町 畬畯畢番略畣畴甮畨町 畖畡畬畵略
申甹由 union Value {
申甹甲 GCObject *gc; /* collectable objects */
申甹申 void *p; /* light userdata */
- 上一篇: 函数与闭包-从0到1抖音运营变现手册大全
- 下一篇: 线程的执行与中断-从0到1抖音运营变现手册大全