
lua TValue类型分析
发布日期:2021-05-08 05:55:22
浏览次数:16
分类:精选文章
本文共 1040 字,大约阅读时间需要 3 分钟。
Lua 中数据的基本结构 下面分析每个结构中各个字段的含义
TValue
Tvalue中的tt 存储了 当前数据的类型,在Lua中有8种基础类型:nil、boolean、number、string、userdata、function、thread和table。
Value 为实际存储的值
Value
p:为c中传入的指针,由c 分配和释放
b:存贮bool值 注意这里是用int存储 而不是bool
f:存贮从c中注册到lua中的c函数 typedef int (*lua_CFunction) (lua_State *L);
n:所有的数值类型 lua5.3 将double 和 int 分开存储新加了一个lua_Integer i 字段
GCObject
gch:用于垃圾回收 主要是为了连接垃圾回收对象的互相引用关系
#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked
next穿链表 tt类型 marked用于垃圾回收的表示 真正存储数据的是TString 等 TString { CommonHeader; ..... } 可以看出来每个垃圾回收对象都有一个CommonHeader ,其实在C中结构体里包含一个其他类型的值 就是相当于模拟C++继承某个类型 可以看到每个垃圾回收类型都继承了 CommonHeader, CommonHeader 是为了垃圾回收时使用 userdata :用户再lua中定义的数据(只是分配内存,并不是定义新的数据类型) lua_State : 类似于thread 运行期间包含的相关数据(堆栈、环境等等) Lua的内存表示: TValue 里不是已经有一个 tt_ 字段用于表示类型了吗?为什么在 GCObject 里还需要这个字段呢? 这个问题可以这样想: 要从 GCObject 反向得到 TValue 是不行的,假如 GCObject 没有 tt 字段,单单持有 GCObject 的时候,没法判断这个 GCObject 的类型是什么。 GC 在回收对象的时候需要根据类型来释放资源。基于第一点,必须在 GCObject 里加一个表示类型的字段 tt。 链接:http://www.jianshu.com/p/ad30f77bd7d6
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月04日 16时40分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
WMI攻击技术研究
2021-05-08
Decision tree(决策树)算法初探
2021-05-08
《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
2021-05-08
sctf_2019_easy_heap
2021-05-09
Eclipse 创建 Maven 项目
2021-05-09
input[file]标签的accept=”image/*”属性响应很慢的解决办法
2021-05-09
AT 杂题泛做
2021-05-09
StringBuilder拼接字符串,“,”在前还是在后问题
2021-05-09
给asterisk1.8.7添加menuselct选项
2021-05-09
组合模式
2021-05-09
PyQt5之音乐播放器
2021-05-09
css居中方法与双飞翼布局
2021-05-09
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2021-05-09
多指灵巧手MoveIt!与Gazebo联合仿真框架搭建
2021-05-09
SQL注入
2021-05-09
XCTF-upload1
2021-05-09
LeetCode 题解 | 1. 两数之和
2021-05-09