08 2023 档案

摘要:这里搜到一篇比较好的介绍和 table dead key 相关的文章,我就做个记录把 https://luyuhuang.tech/2020/10/23/lua-next.html 这篇文章提到的例子: local k = 'a'..'b' local t = { a = 1, [k] = 2, } 阅读全文
posted @ 2023-08-11 19:02 墨色山水 阅读(6) 评论(0) 推荐(0) 编辑
摘要:清除阶段主要是针对 g->allgc,g->finobj,g->tobefnz 这三个链表上的对象。g->allgc 链表是会存在死亡对象(没有再被引用着的对象),而 g->finobj,g->tobefnz 这两个链表,主要是存储带 __gc 元方法的对象,根据上一篇的介绍,我们知道 g->fin 阅读全文
posted @ 2023-08-08 22:02 墨色山水 阅读(12) 评论(0) 推荐(0) 编辑
摘要:定义 如果我们给一个普通表 t,设置元表时,上带 __gc 的元方法,就会让这个表 t 在被回收时,触发 __gc 方法。例如下面的例子: local mt = {__gc = function () print("call __gc ...") end} local t1 = setmetatab 阅读全文
posted @ 2023-08-07 22:22 墨色山水 阅读(119) 评论(0) 推荐(0) 编辑
摘要:lua5.3的上值标记,涉及的内容有点多,就单独拿出来分析下,做下笔记。 我们知道,上值的引用者是闭包,其中包括了lua闭包,和c闭包,被引用者往往是栈上的对象。 c闭包上值 mark 先从简单的c闭包开始看起。 static lu_mem traverseCclosure (global_Stat 阅读全文
posted @ 2023-08-03 21:55 墨色山水 阅读(28) 评论(0) 推荐(0) 编辑
摘要:在 GC 的扫描过程中,由于分步执行,会出现一些已经被扫描过了,被标记为 黑色 black 的对象,再引用到其他新的对象。比如,表 table 就是最容易出现这种情况的。那这种 black 对象再引用其他白色对象,lua是怎么处理的呢? lua gc 使用两种方式解决,一种是 barrier bac 阅读全文
posted @ 2023-08-01 11:11 墨色山水 阅读(20) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示