Lua
文章平均质量分 79
游戏猫
多年游戏开发经验,在这里分享经验和心得
展开
-
lua5.1.3源码分析之GC
一、概述lua实现了对象间的引用管理,在对象不被其他对象应用时,自动释放对象的内存。二、lua对象类型和数据结构1、哪些类型需要GClua的基本类型包括nil、boolean、number、lightuserdata、string、table、function、userdata、thread九种数据类型,另外还有proto、upvalue两种内部类型。其中string、table、function、userdata、thread、proto、upvalue是引用类型,可以被其他多个对象同时引用,需原创 2022-02-28 02:17:06 · 596 阅读 · 0 评论 -
Lua5.1.5源码分析之table实现
一、概述table实现了一个hash表功能,能否方便按key-value来存储数据。lua的table表功能非常强大,key、value的类型可以是number、boolean、string、table、userdata等。二、实现数据结构table的数据结构主要包括一个哈希表和一个数组。具体的结构定义如下图:查询和插入流程查询和插入会判定key的类型,按不同的类型有不同的处理nil:返回nilint:值小于Table.array数组的长度,返回array里的值,否则当成dou原创 2022-02-17 04:00:57 · 1000 阅读 · 0 评论 -
Lua5.1.5源码分析之string实现
一、概述string是Lua的一种数据类型,它不同于普通的基本类型,为了节约内存,多个相同的字符串会共用一个,因而需要管理string的引用情况,从而实现在不被用时,能正确GC。二、实现细节1、string数据类型定义string在Lua运行时里的数据结构是TString。具体的定义如下。如上图,TString可以认为是一个GCObject的派生类(实际不是,只是有GCObject相同的数据成员)。主要记录了string的hash值,长度,字符串值等。3、字符串管理存储结构所有的短字符原创 2022-02-15 03:36:58 · 500 阅读 · 0 评论 -
Lua5.3.6源码分析之string实现
一、概述string是Lua的一种数据类型,它不同于普通的基本类型,为了节约内存,多个相同的短字符串会共用一个,因而需要管理string的引用情况,从而实现在不被用时,能正确GC。二、实现细节1、字符串分类Lua为了节省内存,Lua的字符串分为短字符串和长字符串。短字符串: 长度小于等于40为短字符串。相同字符的短字符串是共用同一个的。长字符串: 长度大于40为长字符串。相同的两个长字符串是两个独立的字符串。2、string数据类型定义string在Lua运行时里的数据结构是TString。原创 2022-02-13 02:46:43 · 970 阅读 · 0 评论