lua5.1.3源码分析之GC

本文深入分析了Lua5.1.3的垃圾回收(GC)机制,涵盖了对象类型、GC根、GC对象管理、GC的实现原理如三色标记法,以及GC的分类、时机、阶段,并通过实例演示了GC步骤。文章详细阐述了Lua中哪些类型需要GC、GC根的组成以及GC对象如何管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

lua实现了对象间的引用管理,在对象不被其他对象应用时,自动释放对象的内存。

二、lua对象类型和数据结构

1、哪些类型需要GC

lua的基本类型包括nil、boolean、number、lightuserdata、string、table、function、userdata、thread九种数据类型,另外还有proto、upvalue两种内部类型。
其中string、table、function、userdata、thread、proto、upvalue是引用类型,可以被其他多个对象同时引用,需要通过自动GC机制来回收。

2、GC根

gc的根包括主线程(lua_State)、注册表(registry)和9种基本类型的元表(mt),其他的线程会被主线程的栈帧引用。

3、GC对象管理

GC管理的对象类型包括string、table、function、userdata、thread、proto、upvalue,这些类型的结构体包含相同的GC信息头,被命名为GCObject。所有分配的对象会被global_State结构体里的rootgc所管理。string是个例外,string不会再引用其他对象,但可以被多个对象引用,string被单独放在了strt里管理。
下面是除string外对象的管理示意图,绿色文字节点为最新创建的对象。

下面是string对象的管理示意图,绿色背

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值