![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Lua源码分析
文章平均质量分 87
啦啦拉德玛西亚
这个作者很懒,什么都没留下…
展开
-
Lua中Userdata类型源码实现
1、概述 Lua中userdata分两种,一种是轻量级userdata(light userdata),轻量级userdata是一种表示C指针的值,对Lua虚拟机来说,这种数据类型不需要GC(垃圾回收),其指向的内存由用户分配和释放,其实现就是一个void *p指针;后一种userdata类型完全userdata(full userdata),内存是由Lua虚拟机分配,并有GC机制负责处转载 2017-09-16 11:09:06 · 1259 阅读 · 0 评论 -
lua _G 实现
在Lua脚本层,Lua将所有的全局变量保存在一个常规的table中,这个table被称为全局环境,并且将这个table保存在一个全局变量_G中,也就是说在脚本中可以用_G获取这个全局table,并且有_G._G == _G,在默认情况,Lua在全局环境_G中添加了标准库比如math、函数比如pairs等。可以通过下面代码,可以递归打印_G中的所有信息:_G = {_G,........}转载 2017-09-16 16:27:45 · 1260 阅读 · 0 评论 -
Lua upvalue 函数 闭包
闭包(closure):是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,函数是一个么有upvalue的闭包非局部变量:不在自己定义的域中的局部变量函数与所有其他的值是一样都是匿名的,即他们没有名称。当讨论一个函数时(例如print),实质上在讨论一个持有某个函数的变量,一个函数定义实质就是一条赋值语句,这条语句创建了一种类型为“函数”的值,并赋值给一个变转载 2017-09-19 10:50:07 · 817 阅读 · 0 评论 -
Lua中require、dofile、loadfile的
可以说Lua之所以称为是一种解释型的语言,正是因为有诸如load这样的函数,因为这样的函数使得Lua可以执行动态生成的代码。下面具体来分析这些函数。 load函数 load函数原型如下:[plain] view plain copyload (chunk [, chunkname [, mode [, env]]]) 该函数加转载 2017-09-19 14:31:20 · 852 阅读 · 0 评论 -
lua TValue类型分析
Lua 中数据的基本结构 下面分析每个结构中各个字段的含义TValueTvalue中的tt 存储了 当前数据的类型,在Lua中有8种基础类型:nil、boolean、number、string、userdata、function、thread和table。Value 为实际存储的值Value p:为c中传入的指针,由c 分配和释放原创 2017-09-15 18:31:38 · 1298 阅读 · 0 评论 -
Lua table数据结构 算法分析
一、数据结构1、Nodenext:当hash冲突时,next = 冲突的node位置 - 应该2、Tablelsizenode:hash数组大小 = 2^lsizenodenode :指向hash部分arraysize :数组部分大小array :指向数组部分lastfree :指向hash表中空闲的节点。每次hash表发生冲突时,都会把节点放在lastfree位置原创 2017-09-28 16:43:05 · 869 阅读 · 0 评论 -
Lua 字符串TString数据结构即算法分析
这里主要写Lua中的字符串TString相关结构和算法。文章中没有贴Lua源码,只画出了结构图,和算法的伪代码。这样阅读起来更加直观。一、TString的概述1、lua中字符串是常量,例s = s .. 1 创建了一个新的字符串赋值给s,并不是改变了s字符串中的数据。2、lua中字符串分为长字符串和短字符串。长字符串和短字符串区别(1)存储方式:短字符串:全局存储一份长原创 2017-09-22 17:39:50 · 976 阅读 · 1 评论