【云风 Lua GC 的源码剖析 (6) 完结】教程文章相关的互联网学习教程文章

lua.5.2.3源码阅读(03):通用变量【代码】

lua的堆栈中存放的是通用变量,通用变量实际上就是一个union内存块,根据不同的类型,采用不同的组织方式,看一下通用类型的相关定义,截取了lobject.h相关代码,从代码上看,不太清楚numfield为什么会有两个相关定义。堆栈中可以根据情况分为一下几种类型:1、双精度浮点数:double d__;2、复合类型,通过tt__来表示类型;3、复合类型中分为两种:可回收类型和不可回收类型;4、可回收类型可以是:TString、Udata、Closure、Table...

用vs2013编译lua源码方法(一)【图】

用vs2013编译lua源码方法来源:网络 编辑:admin1.下载lua源码:lua-5.2.3.tar.gz,解压2.用vs2013建立一个win32工程:1)下载后解压到一个目录下,这里假设解压到 F:\lua-5.2.3 注意下载的版本,如果是5.2.x,后面代码中的C API发生了改变 2)在VS2010中新建一个静态库项目,项目命名为lua   a. 选择新建 Win32 console project   b. 在wizard界面选择 static Library;不选择Precomplied Header 3)往工程中添加代码  ...

lua拆分字符串实现及lua源码查看

lua字符串拆分实现--字符串分割 function splitStr(content, token)if not content or not token then return endlocal strArray = {}local i = 1local contentLen = string.len(content)while true do-- true是用来避开string.find函数对特殊字符检查 特殊字符 "^$*+?.([%-"local beginPos, endPos = string.find(content, token, 1, true) if not beginPos thenstrArray[i] = string.sub(content, 1, contentLen)breakendstrArr...

Lua源码建议阅读顺序

lmathlib.c, lstrlib.c: get familiar with the external C API. Don‘t bother with the pattern matcher though. Just the easy functions.lapi.c: Check how the API is implemented internally. Only skim this to get a feeling for the code. Cross-reference to lua.h and luaconf.h as needed.lobject.h: tagged values and object representation. skim through this first. you‘ll want to keep a window with this fil...

redis源码分析之十八Lua脚本【代码】【图】

一、Lua和Redis 这篇其实和Redis本身的源码关系不是太大了,主要是看一下对REDIS的支持。Lua可能好多人都没有听说过,但是如果搞过网游的人,估计都用过,做为一种胶水语言,Lua对C/C++的支持非常友好,这是一般的脚本语言都没有做到的。它很小很轻量,所以非常容易与其它程序集成。在魔兽和仙剑等游戏中都广泛使用。 Lua的缺点也很明显,对开发支持的力度不大,功能也少,功能少,就意味着如果搞复杂或者大的东西需要自己实现轮子...

lua源码分析2(局部函数的定义)

第1章 续 (11-3) 第二节 局部函数的声明 前面研究了局部变量的定义,下面就研究下, lua 中局部函数定义的方法。 其中局部函数定义的语法是: local function FuncName (parlist) chunk END 首先, lua 会检测到 local function 这两个关键字,知道后面是在 第1章 续(11-3) 第二节 局部函数的声明前面研究了局部变量的定义,下面就研究下,lua中局部函数定义的方法。其中局部函数定义的语法是:local function FuncName (parlist)...

云风 Lua GC 的源码剖析 (6) 完结【代码】

GC 中最繁杂的 mark 部分已经谈完了。剩下的东西很简单。今天一次可以写完。 sweep 分两个步骤,一个是清理字符串,另一个是清理其它对象。看代码,lgc.c 573 行:case GCSsweepstring: {lu_mem old = g->totalbytes;sweepwholelist(L, &g->strt.hash[g->sweepstrgc++]);if (g->sweepstrgc >= g->strt.size) /* nothing more to sweep? */g->gcstate = GCSsweep; /* end sweep-string phase */lua_assert(old >= g->totalbytes);...

lua 1.1 源码阅读总结

GC 1. 怎么回收的lua 中所有已经分配的数据都会用一些指令的数据结构来记录,当需要回收时,先遍历当前栈内所有 object,把 ref 标志位打上 1,遍历符号表(这部分不能回收),反符号表中的所有对象的 ref 标志位也打上 1, 如果有其它不用回收的也同样操作。回收也比较简单,这里遍历所有内部数据结构,如果是 0 就直接释放, 如果是 1 就置 0(可能下次就回收了), 这样就结束了2. 何时回收这个 1.1 有个内部阀值,当新加 object 的...

lua 源码阅读 1.1 -> 2.1

lua 1.1 阅读1. hash.c 中 a) 对建立的 Hash *array 用 listhead 链式结构来管理,新增lua_hashcollector,用来做 Hash 的回收处理。 ps: 1.0 用的是个 512 的数组,用一个少一个 b) Hash *lua_createarray (int nhash) 中新增阀值,用来控制何时进行内存回收4.3 lua 2.1 阅读1. static TreeNode *tree_next (TreeNode *node, char *str) 的代码的简单化2. 常量数组还是常量数组,但是结构变了3. 符号数组演化成了还是一个普通数组...

lua源码分析-心得

最近看完了自己能找的文章,继续下去,就只能自己专研Lua源码了。 国内关于框架或大项目的源码分析类的文章真不多,真不知道是研究的人少,还是软件工程师写博客的人少。 所谓站在岸上就永远无法学会游泳,想弄透澈Lua的代码,就只能硬头片研究下去了。板凳甘坐十年冷,文章不写半句空。修行路上同伴越来越少,只因山越来越高。回想看过的一篇文章,古代祭司的地位非常之高,为什么呢,因为祭司要通过危险的梯子爬上祭台,中途充满了...

Lua源码笔记--字符串连接【代码】

Lua源码笔记–字符串连接 文章目录Lua源码笔记--字符串连接1 Lua语法糖 ..2 table.concat3 string.format4 string.rep5. 总结 Lua字符串连接大概有四种方式:Lua语法糖 ‘…’ table.concat string.format string.rep如何选择合适的字符串连接方式? 1 Lua语法糖 … Lua语法糖 … 可以很方便的做字符串连接。 使用限制:第一个拼接元素必须是字符串,否则会报错,如 s = 1 … “a” 会报错。 第2-N个元素只能是数字或字符串。 在连...

lua源码:Tvalue

typedef TValue *StkId; /* 堆栈中的元素 */typedef struct lua_TValue TValue; struct lua_TValue { TValuefields; /* 堆栈中的元素 */}; // 定义了双精度浮点或者通用类型定义#define TValuefields \ union { struct { Value v__; int tt__; } i; double d__; } u #define LUA_NUMBER doubletypedef LUA_NUMBER lua_Number;#define numfield lua_Number n; /* 双精度浮点数 */#define numfield /* no such ...