码迷,mamicode.com
首页 > 其他好文 > 详细

lua.5.2.3源码阅读(02):字符串对象

时间:2014-12-28 19:25:42      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

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 structure
10 */
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 be
23 ** 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):字符串对象

标签:

原文地址:http://www.cnblogs.com/zerozero/p/4190300.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!