存档

文章标签 ‘lua’

Lua源码剖析(五)

2013年12月3日 没有评论

原创文章,转载请注明: 转载自pagefault

本文链接地址: Lua源码剖析(五)

这次主要来分析lua的gc。

首先lua中的数据类型包括下面9种,ni, Boolean, number, string, table,user data, thread , functions 以及 lightusedata.其中 string, table,thread , function 是会被垃圾回收管理的,其他的都是值存在。

因此我们来看对应的GC数据结构.

#define CommonHeader     GCObject *next; lu_byte tt; lu_byte marked
 
typedef struct GCheader {
  CommonHeader;
} GCheader;

union GCObject {
  GCheader gch;
  union TString ts;
  union Udata u;
  union Closure cl;
  struct Table h;
  struct Proto p;
  struct UpVal uv;
  struct lua_State th;  /* thread */
};

我们可以看到在lua中字符串,userdata, thread, table ,string, thread(以及Upval, proto) 都会被垃圾回收管理。这里比较关键的就是GCheader这个结构体,我们可以看到这个结构体其实就是一个链表,也就是说所有的gc对象都会被链到一个链表中,其中tt表示当前对象的类型,在lua中包括下面这些类型:

#define LUA_TNIL          0
#define LUA_TBOOLEAN          1
#define LUA_TLIGHTUSERDATA     2
#define LUA_TNUMBER          3
#define LUA_TSTRING          4
#define LUA_TTABLE          5
#define LUA_TFUNCTION          6
#define LUA_TUSERDATA          7
#define LUA_TTHREAD          8

而marked表示当前对象的状态(涉及到gc算法,后续会详细分析),状态位包括下面这些:

#define WHITE0BIT     0
#define WHITE1BIT     1
#define BLACKBIT     2
#define FINALIZEDBIT     3
#define KEYWEAKBIT     3
#define VALUEWEAKBIT     4
#define FIXEDBIT     5
#define SFIXEDBIT     6
#define WHITEBITS     bit2mask(WHITE0BIT, WHITE1BIT)

阅读全文…

Share
分类: lua, 源码阅读 标签: ,

lua源码分析

2010年8月14日 5 条评论

原创文章,转载请注明: 转载自pagefault

本文链接地址: lua源码分析

这个是以前blog上写的一些,不过只是分析了一部分,以后会把代码分析完的,这里我把前面分析的做成了pdf供大家 下载

Share
分类: lua, 源码阅读 标签: ,