
lua
文章平均质量分 75
Kelvin7_Feng
Less is more
展开
-
lua GC 回收效率研究
最近项目里打算做一个缓存全服玩家的基础信息的功能,由于数据量表面看上去有点大,需要对数据量进行在内存中大小进行评估,同时也要对GC进行评测,才能确定是否批准把该方案落地。缓存方案:服务器启动时把全服玩家基础数据读取出来进行缓存,每个玩家测试字段数量为:6个int, 2个字符串。按这个数据模板测试,得出的大概内存占用数量统计为:可以从上面图看出,对于30万的玩家来说,内存数据大概108M,即使把字段翻一翻,也就216M,对于服务器的开发换来的是不需要异步读取离线玩家数据,基础数据统一管理的结果,这个内存原创 2020-05-29 14:45:29 · 885 阅读 · 0 评论 -
Lua 源码分析之垃圾回收GC
Lua GC算法1.概览垃圾回收算法里,有两大类别:一是引用计数法,二是标记清除法(Mark & Sweep)。Lua 采用的是第二种,标记清除法。在不同的版本中,Lua的GC有不一样的做法。5.0版本的双色标记算法在早期的5.0版本使用的是双色标记清除法(Two-Color Mark and Sweep),它的大概原理是:每一个对象的状态非黑即白,要么被引用,要么没有被引用,系...原创 2020-02-11 15:24:05 · 1305 阅读 · 0 评论 -
lua string.concat和..性能对比
print("-------------------------------------test1-------------------------------------")--[[测试用例:测试简单字符拼接--]]local a = "hello"local b = "lua"local c = "world"local startTime = os.clock()loca...原创 2020-01-19 15:25:43 · 2510 阅读 · 2 评论 -
CentOS 7 安装 Lua
下载lua源码:wget http://www.lua.org/ftp/lua-5.1.5.tar.gz 解压:tar xvzf lua-5.1.5.tar.gz 切换到lua目录:cdlua-5.1.5/ 安装相关的三方库:yum install -y readline-devel ncurses-devel 安装测试:make linux test 安装:make install...原创 2019-08-17 14:59:47 · 277 阅读 · 0 评论 -
Lua 源码分析之闭包Closure
闭包是Lua语言编程一个重要而又常用的概念。它主要作用是在函数离开作用域后还可以访问外部的临时变量,这些变量称为upvalue。 闭包分为两种,分别CClosure和LClosure。它们都被封装到一个Closure结构体里,CClosure和LClosure都有一个ClosureHeader的结构体。结构体ClosureHeader的字段作用: 1...原创 2019-04-11 19:29:44 · 1099 阅读 · 0 评论 -
Lua 源码分析之Table - Rehash过程
Lua的Table的内存结构主要分array part和hash part,它们俩的内存大小是动态变化的,如果空间不够就需要分配更多的空间,如果空间利用率太少就需要缩减内存,这个过程叫做rehash。现在来看看rehash是怎么样的过程。rehash内部,主要是做了以下几件事: a.计算array part的key的数量 b.计算hash part的key的数量 c.计...原创 2019-04-01 15:44:24 · 2591 阅读 · 0 评论 -
Lua 源码分析之Table - Hash部分内部原理
Lua设计里面,Table是一个特别关键的部分。它可以表示很多的数据结构,可以是Array,可以是Map,可以根据自己的需要实现栈,队列等等,使用起来方便。源码里面的设计显得特别重要了,它是被很频繁地使用,提高性能是设计者重中之中。首先先看一下Lua的总体设计:它分为两部分,分别是数组Array和Hash部分。数组部分主要是存储下标从1开始的连续不为空的节点内容,如果是中间断开部分会存到has...原创 2019-03-15 20:05:01 · 7929 阅读 · 8 评论 -
Lua 源码分析之Table
一、创建一个table(lapi.c, line:666)LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { Table *t; lua_lock(L); luaC_checkGC(L); t = luaH_new(L); sethvalue(L, L->top, t); api...原创 2018-11-07 10:34:36 · 843 阅读 · 0 评论 -
Lua 源码分析之TValue
Lua数据结构设计确定了这个整体的设计理念,Lua所有的数据,一共有9种,都是通过TValue这个结构来存储。Lua的9种基础的数据类型有(lua.h:73):/*** basic types*/#define LUA_TNONE (-1)#define LUA_TNIL 0#define LUA_TBOOLEAN 1#define L...原创 2018-09-06 14:59:25 · 1865 阅读 · 0 评论 -
Lua userdata和lightuserdata
userdata和lightuserdata可以让C返回一个句柄给Lua,而Lua可以将句柄再通过在C中注册的方法传回Cuserdata:userdata通过Lua的API(lua_newuserdata())分配内存,就像C里的malloc()函数分配内存,但不需要调用free()去释放内存,该内存是由LUA的GC机制进行回收。lightuserdata:lightuserdat...原创 2018-08-30 10:14:56 · 10564 阅读 · 0 评论 -
Lua 源码分析之String
因为每一版本的源码可能会有差别,现在基于lua 5.2.1来分析,保持一致性。从虚拟机的大体来看,字符串通过一个结构体存放在global_State里,这个结构stringtable(lstate.h)是:GCObject(lstate.h)的结构是:stringtable结构体的字段含义是:GCObject **hash:GCObject指针的指针,通过Hash值可以指...原创 2018-06-15 11:48:36 · 1437 阅读 · 0 评论 -
C++嵌入lua脚本
一步一步写 C++嵌入lua脚本 Demo原创 2016-09-05 14:08:32 · 1320 阅读 · 0 评论