![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
系列-Lua5.1
文章平均质量分 75
Lua
liuyuan185442111
主要为了增强记忆和方便查询,评论如果没有及时回复,还请见谅
展开
-
lua的GC
关于lua的gc云风大佬在系列文章中讲得很清楚,这里做一下简单的记录。原创 2024-06-19 20:16:19 · 1235 阅读 · 0 评论 -
关于lua源代码中的EXTRA_STACK宏
经过查看代码发现,p3可能是栈上的数据,luaD_checkstack中可能会调用luaD_reallocstack导致p3不可用。但是用AddressSanitizer工具测试发现,在执行源码自带的trace-globals.lua时,所以luaD_checkstack要放到后面执行。我看到这里就想,干嘛不提前。会报使用已free内存。原创 2024-06-01 23:23:57 · 300 阅读 · 0 评论 -
lua字符串模式匹配
string.gmatch (s, pattern)中,如果s的开头是’^'字符,不会被当成行首标志,而是被当成一个普通字符。不会输出任何内容,而。会输出^hello。原创 2024-05-31 16:53:55 · 377 阅读 · 0 评论 -
lua函数执行和虚拟机指令
特别的看一下数据栈的处理,在编译时已确定每个lua函数执行过程中数据栈的最大大小,将ci->top/L->top直接设为最大值,[L->base, L->top)就做为lua指令的“寄存器空间”使用,访问寄存器就是以下标访问base数组。寄存器空间不会很大,但常量数组可能会很大,而B、C的大小有限,如果B或C需要引用的常量地址超出了表示范围,在指令生成阶段,则首先会生成指令将常量装载到寄存器,然后再将B或C改为使用该寄存器地址。不等的情况,跳转到第5条指令,将ra设置为0,此时c为1,会跳过第6条指令。原创 2024-05-24 22:14:46 · 1144 阅读 · 0 评论 -
lua的数据类型,lua_State,函数调用,协程
stack,stack_last],[base_ci,last_ci]分别是数据栈数组和调用栈数组,stacksize,size_ci分别是两个数组的大小,在需要的时候它们会进行增长。lua_State的top就是正在调用的函数的堆栈的位置啊。lua_call,lua_pcall都可以调lua或c函数,需要准备好函数在栈上。正在调用的函数一定存在于数据栈上,由func引用正在调用的函数对象。ci是当前正在调用的函数的运行状态,base是该函数的栈底指针。luaD_pcall,oldtop是干嘛用的。原创 2024-05-07 00:00:00 · 484 阅读 · 0 评论 -
使用lua时一个愚蠢的错误
调luaL_openlibs(L)之前栈是空的,lua_call(L, 1, 0)也没在栈上留东西,而所以栈上只有一个值,从栈顶栈底取数据都一样,但lib->func(L)却在栈上遗留了数据。pmain里再去掉luaL_openlibs(L),所以也理解了为什么它用lua_cpcall包了一层pmain,而不是直接调。因为我瞎改了一些代码,最初怀疑是不是调用过程出问题了,栈让我改坏了。但最后却发现问题出在。之前看luaL_openlibs(),感觉直接调打开库的函数好像也没差别,所以将。原创 2024-04-28 20:00:00 · 306 阅读 · 0 评论 -
lua的字符串和Table类型实现
不是的,刚创建的空表数组部分长度为0,哈希表也为空,插入新元素时,如果key是数字但不在[1,sizearray]范围内,会往哈希表里插,如果发现哈希表没有空闲节点,便会执行rehash(),rehash()会依据一定规则(computesizes()函数,调整数组部分的大小使其利用率不小于50%),重新设置数组和哈希表的大小。为了减少空表的维护成本,定义了一个不可改写的全局空哈希表dummynode,当以大小0初始化或resize哈希表时,node域指向这个dummy节点,此时lsizenode也为0。原创 2024-04-16 12:51:45 · 947 阅读 · 0 评论 -
lua源码学习:解释器和内嵌库
以前游戏里用到过lua,主要是做配置,所以专门看过《lua程序设计》第二版。后面用lua实现了一个功能,大概几千行代码,当时感觉到写起来方便,调试维护确实不易。听说lua只有2万行代码,便实现了主流动态语言的大部分功能,于是想学习一下。最近开始看了一点lua(5.1.4版本)的源代码,主要是lua解释器和内嵌库(不含debug库和string库的模式匹配)。原创 2023-07-31 11:11:01 · 571 阅读 · 0 评论 -
Lua几个例子
lua-5.1.4.tar.gz里test目录下有一些测试用例,我看了一遍,令人印象深刻的地方有: string库的模式匹配,简化的正则,够用不复杂。 协程和闭包,有时可简化编程,但有时也不好理解。 table的__index和__newindex,可用来模拟面向对象,规则虽然简单,但用好真不那么容易。部分摘选:斐波那契(fibonacci)数列fibfor.lua 这...原创 2018-09-11 15:42:53 · 2899 阅读 · 0 评论 -
Lua的与C交互
.原创 2017-06-28 14:06:08 · 446 阅读 · 0 评论 -
Lua的碎碎念
.原创 2017-06-19 20:34:48 · 379 阅读 · 0 评论 -
Lua之实现一个bool数组
.原创 2017-07-04 15:52:39 · 749 阅读 · 0 评论 -
Lua的面向对象
.原创 2017-01-07 15:56:01 · 674 阅读 · 0 评论 -
Lua的协程
.原创 2017-01-08 21:13:37 · 522 阅读 · 0 评论 -
Lua的for in和pairs
.原创 2017-01-06 23:56:51 · 24481 阅读 · 1 评论