网站推广预期达到的目标,新桥做网站,公司网站一年多少钱,无锡网建公司【lua学习】2.数据类型Lua中的数据类型关于TValue自顶向下分析TValue表示所有的Lua数据结构并带一个类型字段Value表示所有的Lua数据结构GCObject表示所有需要进行垃圾回收的数据结构GCheader表示需要GC的数据结构最开始的部分Lua中的数据类型
宏名 (见lua.h)宏值类型对应数据…
【lua学习】2.数据类型Lua中的数据类型关于TValue自顶向下分析TValue表示所有的Lua数据结构并带一个类型字段Value表示所有的Lua数据结构GCObject表示所有需要进行垃圾回收的数据结构GCheader表示需要GC的数据结构最开始的部分Lua中的数据类型
宏名 (见lua.h)宏值类型对应数据结构LUA_TNONE-1无类型无LUA_TNIL0空类型无LUA_TBOOLEAN1布尔类型无LUA_TLIGHTUSERDATA2指针void*LUA_TNUMBER3数字lua_NumberLUA_TSTRING4字符串TStringLUA_TTABLE5表TableLUA_TFUNCTION6函数CClosure,LClosureLUA_TUSERDATA7指针void*LUA_TTHREAD8lua虚拟机协程lua_State
关于TValue自顶向下分析
TValue表示所有的Lua数据结构并带一个类型字段
(lobject.h) TValue
typedef struct lua_TValue {TValuefields;
} TValue;(lobject.h) TValuefields
//Value就是一个可以代表任何值类型的union
//上述宏定义中tt表示类型也就是上面表格列举的宏
#define TValuefields Value value;int ttValue表示所有的Lua数据结构
(lobject.h) Value
typedef union {GCObject* gc;//存需要gc类型的值void* p;//存lightuserdata类型的值lua_Number n;//存数字类型的值int b;//存boolean类型的值
} Value;GCObject表示所有需要进行垃圾回收的数据结构
(lstate.h) GCObject
union GCObject {GCHeader gch;//看下面定义union TString ts;//LUA_TSTRING 4union Udata u;//LUA_TUSERDATA 7union Closure cl;//LUA_TFUNCTION 6struct Table h;//LUA_TTABLE 5struct Proto p;struct UpVal uv;struct lua_State th;//LUA_TTHREAD 8
};GCheader表示需要GC的数据结构最开始的部分
(lobject.h) GCheader
typedef struct GCheader {CommonHeader;//看下文
} GCheader;(lobject.h) CommonHeader
//任何和需要进行垃圾回收的Lua对象必然以CommonHeader为最开始的部分
//next 指向下一个GC链表的成员todo 后面再说
//tt 表示的数据类型也就是开始表格定义的宏
//marked GC相关的标记为todo 后面再说
#define CommonHeader GCObject* next; lu_byte tt; lu_byte marked(lobject.h) gcvalue宏 获取对象的gc部分
//check_exp看下文
//iscollectable看下文
#define gcvalue(o) check_exp(iscollectable(o), (o)-value.gc))(llimits.h) check_exp 条件成了才展开宏
//不判断c的条件直接展开宏e
#define check_exp(c,e) (e)(lobject.h) iscollectable
//判断一个对象是否需要GC只需要获得其类型宏值字符串即可
#define iscollectable(o) (ttype(o)LUA_TSTRING)
//ttype看下文(lobject.h) ttype
//看ttype
//获取一个对象的类型
#define ttype(o) ((o)-tt)