Lua虚拟机分析之一

    可能游戏圈的朋友对lua会更熟悉些,灵活、高效、跨平台、易用等诸多优点决定了这门语言将会得到更广泛的应用,而不只局限于游戏,已经有许多的技术大牛对这门语言做过许多的分析,这其中就包括云风,关于lua的更多介绍,可以查看官网,以及各种搜索引擎。本文旨在对lua虚拟机进行简单的分析,包含的内容有虚拟机中一部分基本的数据结构。

    在应用的角度来看,lua有以下几种数据类型:nil、布尔类型、[light]UserData、Number、字符串、表、函数、线程(不同于操作系统的线程),而所有这些类型的表示,都需要一个被称为TValue的类型支撑,如下:

#define numfield	/* no such field; numbers are the entire struct */
typedef int (*lua_CFunction) (lua_State *L); // 先看成普通的C函数指针吧

union Value {
  GCObject *gc;    /* collectable objects */ // 这期先不管这个,当成指针来看就ok了
  void *p;         /* light userdata */
  int b;           /* booleans */
  lua_CFunction f; /* light C functions */
  numfield         /* numbers */
};

#define TValuefields  \
	union { struct { int tt__; Value v__; } i; double d__; } u

struct lua_TValue {
  TValuefields;
};
typedef struct lua_TValue TValue;


 
 

    看起来有点绕,对吧?基础的数据类型TValue其实就是一个4字节的union,外加一个类型tt__,或者表示成一个double类型,至于类型tt__,上面已经介绍过有那么几种类型,而关于各种具体类型对应的id,如下:

#define LUA_TNONE		(-1) // 好吧,把这个也当成空类型吧
#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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值