lua5.1.3源码分析之GC

lua 5.2 GC 源码分析 一 最近一直在看lua5.2的GC。总想写点自己的理解。        今天也看的差不多了,可以开始写了。        此前查阅了官方的一些资料,推荐给大家,下面是网址:        http://lua-users.org/wiki/GarbageCollection            lua5.2里面有三种回收机制 /* kinds of Garbage Collection * 阅读详情

一、概述

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对象的管理示意图,绿色背

Lua:5.1.3 GC过程 一、概述 lua实现了对象间的引用管理,在对象不被其他对象应用时,自动释放对象的内存。 二、lua对象类型和数据结构 1、哪些类型需要GC lua的基本类型包括nil、boolean、number、lightuserdata、string、table、function、userdata、thread九种数据类型,另外还有proto、upvalue两种内部类型。 其中string、table、function、userdata、thread、proto、upvalue是引用类型,可以被其他多个对象同时引用, 阅读详情

相关推荐

Lua 5.3 源码分析(一)类型系统

Lua 5.3 源码分析(一)类型系统数据类型/* ** basic types */ #define LUA_TNONE (-1)#define LUA_TNIL 0 #define LUA_TBOOLEAN 1 #define LUA_TLIGHTUSERDATA 2 #define LUA_TNUMBER 3 #define LUA_TSTRI

TTc 's share 3066

Lua 5.3 源码分析(四)线程 lua_State

Lua 5.3 源码分析(四)线程 lua_StateLua 的THREAD 类型定义如下图: /* ** ‘per thread’ state */ struct lua_State { //1 Lua 类型公共头部 CommonHeader; //2 global_State *l_G

TTc 's share 2540

LUA学习路线汇总

语法   Lua程序设计Programming in Lua   果冻想-Lua 语法入门 源码   the implementation of lua 50 英文原版 中文翻译   Lua源码鉴赏-云风   探索Lua52内部实现   详解关于Lua源码分析学习教程   Lua源码 应用   果冻想其他系列    Lua51 参考手册    Lua53 参考手册   云风博客   Lua Pr

旋律猪的博客 1万+

Lua 5.3 源码分析 (七) 闭包 Closure

Lua 5.3 源码分析 (七) 闭包 Closure概述闭包(Closure)在函数式编程中是一个重要概念,如果说 C+ + 的面向对象编程是把一组函数绑定到特定的数据类型上的话,那么闭包就是把一组数据绑定到特定的函数上。当调用 counter 后,会得到一个函数。这个函数每调用一次,返回值会加一。 我们把这个返回的你们函数记作一个计数器。counter 可以产生多个计数器,每个都独立计算

TTc 's share 1961

Lua5.3.6源码分析之string实现

一、概述 string是Lua的一种数据类型,它不同于普通的基本类型,为了节约内存,多个相同的短字符串会共用一个,因而需要管理string的引用情况,从而实现在不被用时,能正确GC。 二、实现细节 1、字符串分类 Lua为了节省内存,Lua的字符串分为短字符串和长字符串。 短字符串: 长度小于等于40为短字符串。相同字符的短字符串是共用同一个的。 长字符串: 长度大于40为长字符串。相同的两个长字符串是两个独立的字符串。 2、string数据类型定义 string在Lua运行时里的数据结构是TString。

游戏猫的博客 1203

xlua源码分析(四) lua访问C#的值类型

与tolua相比,两者都实现了无gc的值类型传递。而tolua的值类型,默认会在lua层实现一份类似的代码,lua层在调用时,完全是走的lua层的逻辑,不会涉及拷贝数据到C#层的逻辑,只有作为函数调用参数和返回值时,才涉及到数据的拷贝。这样做的好处,就是避免了在函数调用过程的频繁的数据拷贝开销,不方便的地方就是需要在lua层自己实现一遍C#的值类型,而使用wrap则只需要自动生成代码即可,没有额外的开发负担。比如这里,把一个C#对象push到lua层,意味着lua层需要知道对象的类型id,也就是C#层的。

异次元的归来 1961

Lua5.1.5源码分析之string实现

一、概述 string是Lua的一种数据类型,它不同于普通的基本类型,为了节约内存,多个相同的字符串会共用一个,因而需要管理string的引用情况,从而实现在不被用时,能正确GC。 二、实现细节 1、string数据类型定义 string在Lua运行时里的数据结构是TString。具体的定义如下。 如上图,TString可以认为是一个GCObject的派生类(实际不是,只是有GCObject相同的数据成员)。主要记录了string的hash值,长度,字符串值等。 3、字符串管理 存储结构 所有的短字符

游戏猫的博客 631

纽马克-贝塔法(Newmark-Beta Method)在结构动力学中的应用与实现

本文深入解析了纽马克-贝塔法(Newmark-Beta Method)在结构动力学数值计算中的核心原理与应用。作为经典的时间积分算法,它通过调节γ和β参数,在计算精度、稳定性与效率间取得平衡,尤其适用于地震响应、风振分析等工程场景。文章详细阐述了其数学内核、在有限元分析中的实现步骤,并对比了隐式与显式方案的适用场景,为工程师提供了关键的方法选择与参数调优指导。

weixin_29232121的博客 148

用HFSS复现经典论文:从零搭建带孔缝屏蔽箱体模型(附完整建模步骤与避坑指南)

本文详细介绍了如何使用HFSS电磁仿真软件复现经典论文中的带孔缝屏蔽箱体模型,包括从零搭建模型、设置激励与边界条件、求解优化及结果验证的全过程。特别提供了建模中的布尔运算陷阱、激励设置技巧等实操难点的避坑指南,帮助工程师和学生深入理解电磁屏蔽效能研究。

weixin_30530339的博客 157

BUCK 电路详解

参考内容: 手撕Buck!Buck公式推导过程 电力电子的基础应用 《精通开关电源设计(第二版)》 Buck电源芯片输出有问题?检查这几样 原来PWM这么简单! BUCK 电路构建 根据高中所学习的物理知识可以很容易的想到,使用一个滑动变阻器即可实现降压和稳压的效果。当负载波动时,通过改变滑动变阻器的阻值,可以调节负载所获得的电压。但是使用滑动变阻器的劣势也很明显,大量的耗能会导致器件温度快速升高。 上面所提到的电路主要缺点在于导通器件(变阻器或三极管)本身存在耗能,那么有没有不会耗能的导通器件呢?

Guanngxu的博客 3985

使用 DeepSeek 配合 即梦AI 生成视频的详细教程

访问即梦AI官网,选择“AI作图”功能,将DeepSeek生成的提示词逐条粘贴至输入框,选择适配的模型(如“通用XL Pro”)和参数(如画幅比例、风格强度)1113。“我要制作一个关于普洱茶文化的宣传视频,请设计一个30秒的脚本,包含时间轴、画面描述、文案和分镜提示词,以表格形式输出。:云南古茶树群,清晨薄雾,金色晨光,露珠特写,国风山水画质感,16:9画幅,使用Nikon D850参数模拟513。:结合DeepSeek生成的知识点脚本与即梦AI的插画风格,制作科普动画211。

weixin_48995695的博客 3万+

设置Solidworks导出文件的坐标系,stl坐标系平移

使用solidworks输出的模型坐标不再原点,怎么平行坐标系,这个方法很简单

weixin_45650767的博客 1万+

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输至原子云

本文详细介绍了如何使用立创·庐山派-K230-CanMV开发板,通过ATK-ESP8266 WIFI模块实现图像识别数据的无线传输至原子云平台。内容包括硬件连接、软件环境搭建、AT指令控制、原子云连接及数据上传的全过程,并提供了实用的调试技巧和常见问题解决方案,为物联网应用开发提供了完整实践指南。

potato的博客 741

【proteus】模拟串口和物理串口通讯

proteus提供了两种串口,一种是模拟的串口,还有一张是用软件仿真到硬件的物理串口。他们的区别就是:模拟串口只能在proteus内部进行通讯,但是物理可以通过软件映射到硬件上和单机或者串口软件通讯。 物理串口在元器件搜索COMPIM即可找到。 模拟串口在这里: PROTEUS仿真图: 物理串口COMPIM的设置: 模拟串口的设置: VSPD是一款虚拟串口软件,VSPD下载链接: 链接:https://pan.baidu.com/s/1AZygJCeWZfQTnxdCb_3TPg 提取码:12pm

阿蛋的博客 8933

【Python爬虫系列】_005.浏览器开发者工具(详解)

Elements(元素)分析当前页面节点,用来辅助书写BS或者XPath这里面的数据与源代码有区别,不一定准确(避坑)Console(控制台)这个除了查看错误信息、打印调试信息(console.log())、写一些测试脚本以外,还可以当作Javascript API查看用例如我想查看console都有哪些方法和属性,我可以直接在Console中输入"console"并执行后续学js逆向的时候需要用到Sources(源代码)与在网页页面,鼠标右键——查看网页源代码 内容一致。

weixin_50296259的博客 422

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: Debian11镜像源
游戏猫
博客等级 码龄10年 40粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值