首页 > 代码库 > lua.5.2.3源码阅读(02):字符串对象
lua.5.2.3源码阅读(02):字符串对象
lua中的字符串是对象,主要分析一下对象的结构和申请的方式。
TString是一个union,为了进行字节对齐,中间插入了L_Umaxalign,按照union的定义
union的大小,必须是单个结构大小的整数倍,按照目前的定义,应该是double大小的整数倍。
1 /* type to ensure maximum alignment */ 2 #if !defined(LUAI_USER_ALIGNMENT_T) 3 #define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } 4 #endif 5 6 typedef LUAI_USER_ALIGNMENT_T L_Umaxalign; 7 8 /* 9 ** Header for string value; string bytes follow the end of this structure10 */11 typedef union TString {12 L_Umaxalign dummy; /* ensures maximum alignment for strings */13 struct {14 CommonHeader;15 lu_byte extra; /* reserved words for short strings; "has hash" for longs */16 unsigned int hash;17 size_t len; /* number of characters in string */18 } tsv;19 } TString;20 21 /*22 ** Common Header for all collectable objects (in macro form, to be23 ** included in other objects)24 */25 #define CommonHeader GCObject *next; lu_byte tt; lu_byte marked
展开上述定义,实际TString的关键定义:
1 struct {2 GCObject *next; 3 lu_byte tt; 4 lu_byte marked;5 lu_byte extra; /* reserved words for short strings; "has hash" for longs */6 unsigned int hash;7 size_t len; /* number of characters in string */8 } tsv;
tt用于表示GC对象的类型,marked用于GC收集的时候的类型,后续再分析,extra标记是否为lua的保留字符串,hash为短字符串的哈希值,len为字符串的长度。
lua.5.2.3源码阅读(02):字符串对象
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。