LUA TValue结构

LUA TValue

//其形式如下:
typedef struct TValue {
  Value value_;	//raw value
  lu_byte tt_;	//raw type tag
} TValue;

//其Value为LUA所支持的基本类型的union形式
typedef union Value {
  struct GCObject *gc;
  void *p;
  lua_CFunction f;
  lua_Integer i;
  lua_Number n;
} Value;

// lu_byte tt_ 即 unsigned char tt_ 为变量类型
因此ttisinteger(o) 等价于 o->tt_ == 3 ? true : false

union结构体中各项的具体意义为:

变量说明
GCObject gch用于垃圾回收 主要是为了连接垃圾回收对象的互相引用关系
void *p为c中传入的指针,由c 分配和释放
lua_CFunction f表示C导出给lua的函数指针,typedef int (*lua_CFunction) (lua_State *L);
lua_Integer i表示整数类型,typedef long long lua_Integer;
lua_Number n表示双精度浮点类型,typedef double lua_Number;

从网络上找到的一个TValue结构图见下:
图示
图示与代码已经有了一些可见变化,可见lua 5.3 版本相较于图示结构已经有了一些修改,比如取消了原本使用int类型存贮bool值的b,将原本存储所有数值类型的double n拆为存储整数的lua_Integer的i和存储双精度浮点数的n
其中GCObject gch的结构,如下:

typedef struct GCObject {
	struct GCObject *next;
	unsigned char tt;
	unsigned char marked;
} GCObject;

next指向下一个链表结构,tt表示类型,marked是垃圾回收的标记,具体LUA 5.3 垃圾回收机制见:LUA 5.3 垃圾回收机制.(重要不紧急)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值