upvalue的类型为
typedef struct UpVal {
CommonHeader;TValue *v; /* points to stack or to its own value */
union {
TValue value; /* the value (when closed) */
struct { /* double linked list (when open) */
struct UpVal *prev;
struct UpVal *next;
} l;
} u;
} UpVal;
当其为open时,是对当前栈上数据的引用.
lua采用mark and sweep GC. 其中main invariant (white objects cannot point to black ones)
新创建的upvalue默认为关闭的,并加入allgc
UpVal *luaF_newupval (lua_State *L) {
UpVal *uv = &luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal), NULL, 0)->uv;
uv->v = &uv->u.value;
setnilvalue(uv->v);
return uv;
}
Lua upvalue详解
本文深入解析Lua中的upvalue结构及其实现原理。介绍了upvalue在Lua中的数据结构定义,包括其内部指针和联合体成员的用途。探讨了upvalue在open和closed状态下的工作方式,以及Lua如何通过mark and sweep垃圾回收机制来管理这些upvalue。

被折叠的 条评论
为什么被折叠?



