07 2023 档案
摘要:前言 虽然平时用到弱表的地方不是很多,但去了解下它的设计实现也是好的。 我们是在标记阶段,才会去触发 propagatemark(),将一个灰色对象标记为黑色,然后再去遍历其引用到的其他对象,将其他对象都 mark gray,并加入灰色链表,如此反复,直到 灰色链表为空,才进入到原子阶段。 /* *
阅读全文
摘要:对象创建 对于可回收的对象(TString,Table,Udata,Closure,Proto,lua_State),它们的创建流程基本相同,都是调用 luaC_newobj 接口的。举例,我们可以通过观察代码 table 的创建流程,可以得出,每个可回收的对象,都是由一个 GCObject 结构体
阅读全文
摘要:lua可回收对象 lua从堆中申请内存以及释放,都是通过gc垃圾回收器来管理的。 lua可回收的内存对象有:TString(字符串),Table(表),Udata(用户数据),Closure(分为lua闭包和c闭包),Proto(函数原型),lua_State(线程) /* ** 在 lstate.
阅读全文