lua TValue类型分析
来源:互联网 发布:淘宝申请代销 编辑:程序博客网 时间:2024/06/01 08:16
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 里还需要这个字段呢?
链接:http://www.jianshu.com/p/ad30f77bd7d6这个问题可以这样想:
- 要从 GCObject 反向得到 TValue 是不行的,假如 GCObject 没有 tt 字段,单单持有 GCObject 的时候,没法判断这个 GCObject 的类型是什么。
- GC 在回收对象的时候需要根据类型来释放资源。基于第一点,必须在 GCObject 里加一个表示类型的字段 tt。
阅读全文
0 0
- lua TValue类型分析
- Lua 5.3 源码分析(二)值 TValue
- Lua解析1 TValue
- Lua数据结构 — TValue(一)
- Lua数据结构 — TValue(一)
- Lua中table类型源码分析
- Lua 5.3 源码分析(一)类型系统
- [cocos2dx-lua]"Hello Lua"分析
- LUA基本类型
- Lua基础类型
- LUA 类型转换
- Lua 类型与值
- LUA table类型
- lua中的基本类型
- Lua 类型和值
- Lua类型与值
- Lua 类型和值
- lua中的基本类型
- 【观点】比特币如何拯救飓风“哈维”的受灾者
- 今天被一个架构师面了
- react优化性能
- 初识H5
- SpringMVC中在使用@ResponseBody时如何将Date类型的日期返回指定格式的json数据
- lua TValue类型分析
- 【国际】美国总务署官员:区块链采购原型推进中
- 【国际】欧洲央行&日本央行:区块链尚不成熟,不能服务大型央行
- 【行业】安永联合微软和马士基在海上保险中使用区块链
- Oracle连接查询
- 使用Fiddler调试手机请求调用webapp
- Servlet总结一
- JDBC优化
- 【国际】印度邦政府合作搭建公共部门应用程序