社区
移动开发其他问题
帖子详情
lua脚本内存释放问题
yao06031989
2016-02-01 05:25:52
最近小女子开发手机游戏碰到一个十分棘手的问题,有没有大牛能解答:
开发环境及语言:cocos2dx+lua
目前使用纯lua开发了一个游戏大厅,游戏大厅里面有若干个不同游戏图标,点击相应图标开始加载对应游戏的lua脚本,从游戏中返回大厅再释放游戏的lua脚本内存,现在不知如何释放lua脚本内存,试过:加载游戏脚本时使用setfenv为其设置环境,然后退回到大厅时销毁环境,但也没用。
跪求。。。
...全文
824
2
打赏
收藏
lua脚本内存释放问题
最近小女子开发手机游戏碰到一个十分棘手的问题,有没有大牛能解答: 开发环境及语言:cocos2dx+lua 目前使用纯lua开发了一个游戏大厅,游戏大厅里面有若干个不同游戏图标,点击相应图标开始加载对应游戏的lua脚本,从游戏中返回大厅再释放游戏的lua脚本内存,现在不知如何释放lua脚本内存,试过:加载游戏脚本时使用setfenv为其设置环境,然后退回到大厅时销毁环境,但也没用。 跪求。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nicky_tao
2016-03-08
打赏
举报
回复
在游戏中不要使用全局变量,然后游戏返回大厅是,把游戏require过的文件都释放掉了试试
dirdirdir3
2016-03-04
打赏
举报
回复
应该考虑的是cocos2dx的内存释放吧
Programming_In_
Lua
.doc(word版本,带完整文档结构图)
目前很多程序语言都专注于帮你编写成千上万行的代码,所以此类型的语言所提供的包、命名空间、复杂的类型系统及无数的结构,有上千页的文档需要操作者学习。 而
Lua
并不帮你编写大量的代码的程序,相反的,
Lua
仅让你用少量的代码解决关键
问题
。为实现这个目标,像其他语言一样
Lua
依赖于其可扩展性。但是与其他语言不同的是,不仅用
Lua
编写的软件易于扩展,而且用其他语言比如C/C++编写的软件也很容易使用
Lua
扩展其功能。 一开始,
Lua
就被设计成很容易和传统的C/C++整合的语言。这种语言的二元性带来了极大的好处。
Lua
是一个小巧而简单的语言,因为
Lua
不致力于做C语言已经做得很好的领域,比如:性能、底层操作以及与第三方软件的接口。
Lua
依赖于C去做完成这些任务。
Lua
所提供的机制是C不善于的:高级语言、动态结构、简洁、易于测试和调试等。正因为如此,
Lua
具有良好的安全保证,自动
内存
管理,简便的字符串处理功能及其他动态数据的改变。
Lua
不仅是一种易于扩展的语言,也是一种易整合语言(glue language);
Lua
支持基于组件的,我们可以将一些已经存在的高级组件整合在一起实现一个应用软件。一般情况下,组件使用像C/C++等静态的语言编写。但
Lua
是我们整合各个组件的粘合剂。又通常情况下,组件(或对象)表现为具体在程序开发过程中很少变化的、占用大量CPU时间的决定性的程序,例如窗口部件和数据结构。对那种在产品的生命周期内变化比较多的应用方向使用
Lua
可以更方便的适应变化。除了作为整合语言外,
Lua
自身也是一个功能强大的语言。
Lua
不仅可以整合组件,还可以编辑组件甚至完全使用
Lua
创建组件。 除了
Lua
外,还有很多类似的
脚本
语言,例如:Perl、Tcl、Ruby、Forth、Python。虽然其他语言在某些方面与
Lua
有着共同的特色,但下面这些特征是
Lua
特有的: ① 可扩展性。
Lua
的扩展性非常卓越,以至于很多人把
Lua
用作搭建领域语言的工具(注:比如游戏
脚本
)。
Lua
被设计为易于扩展的,可以通过
Lua
代码或者C代码扩展,
Lua
的很多功能都是通过外部库来扩展的。
Lua
很容易与C/C++、java、fortran、Smalltalk、Ada,以及其他语言接口。 ② 简单。
Lua
本身简单,小巧;内容少但功能强大,这使得
Lua
易于学习,很容易实现一些小的应用。他的完全发布版(代码、手册以及某些平台的二进制文件)仅用一张软盘就可以装得下。 ③ 高效率。
Lua
有很高的执行效率,统计表明
Lua
是目前平均效率最高的
脚本
语言。 ④ 与平台无关。
Lua
几乎可以运行在所有我们听说过的系统上,如NextStep、OS/2、PlayStation II (Sony)、Mac OS-9、OS X、BeOS、MS-DOS、IBM mainframes、EPOC、PalmOS、MCF5206eLITE Eva
lua
tion Board、RISC OS,及所有的Windows和Unix。
Lua
不是通过使用条件编译实现平台无关,而是完全使用ANSI (ISO) C,这意味着只要你有ANSI C编译器你就可以编译并使用
Lua
。
Lua
大部分强大的功能来自于他的类库,这并非偶然。
Lua
的长处之一就是可以通过新类型和函数来扩展其功能。动态类型检查最大限度允许多态出现,并自动简化调用
内存
管理的接口,因为这样不需要关心谁来分配
内存
谁来
释放
内存
,也不必担心数据溢出。高级函数和匿名函数均可以接受高级参数,使函数更为通用。
Lua
自带一个小规模的类库。在受限系统中使用
Lua
,如嵌入式系统,我们可以有选择地安装这些类库。若运行环境十分严格,我们甚至可以直接修改类库源代码,仅保留需要的函数。记住:
Lua
是很小的(即使加上全部的标准库)并且在大部分系统下你仍可以不用担心的使用全部的功能。
mx.samples:像先生雷达或咖啡先生,但用于范本的样品
样品 mx.samples:类似于mr.coffee或mr.radar,但适用于乐器样本。 我们作为键盘乐器或其他
脚本
使用。 mx.samples提供了一种可利用的方式来利用大量免费的仪器样品库。 例如,您可以加载已在多个动态,变体和键
释放
上进行采样的钢琴。
脚本
+超级对撞机引擎的核心处理声音和乐器。 您可以在磁盘上拥有无限的样本,因为样本是动态加载的-仅在需要时才加载到
内存
中(虽然最多可以加载200个样本)。 加载没有延迟,因为它将在后台加载(同时使用最接近的音高样本)。 我编写此
脚本
的动机是让标准钢琴上的声音听起来非常好。 此外,我希望能有与行之有效的样本库 (见studies/study1.
lua
和演示以上),但也可以用于理念银河系未来的项目。 非常感谢@zebra帮助我对UofI钢琴样本进行后处理-由于这项工作,有一个很棒的录制过程中出现故障的样本。 如果没有人们的慷慨提交
游戏辅助从0到1-C++调用调用游戏
Lua
脚本
实现辅助
本课程以TLB*和W*W为例子,讲述如何通过游戏的
Lua
脚本
来实现一个游戏的辅助。众所周知,游戏的逻辑基本上都是采用
Lua
等
脚本
语言编写的,我们通过逆向分析游戏,找到游戏
Lua
接口和
Lua
函数后,很容易的就能实现一个游戏辅助所需要的所有功能,比起逆向游戏来讲,本课程更容易上手,适合0基础的朋友们学习,在学完本课程后再去学习游戏逆向技术会事半功倍,再者,在实际的游戏辅助编写的过程中,可能有很多地方我们需要花大量的时间找call,如果是我们直接去调用游戏的
Lua
脚本
的话也会节约我们大量的时间,节省我们的开发成本。 本课程适合有一定的C/C++基础,想做点实际应用,或者是对游戏辅助有强烈兴趣的朋友们学习。 本课程分为三部分:第一部分是讲述
Lua
的基础及C/C++与
Lua
联合编程的内容第二部分讲述的是动态调用
Lua
游戏辅助的实现第三部分讲的是静态调用
Lua
游戏辅助的实现 课程目前已经完成了第一部分的制作,第二部分的课件已经完成 大概每周会都更新1到2节课的内容
Lua
中
内存
管理和
释放
的理解
Lua
内存
是自动收集的, 这点跟Java类似, 不被任何对象或全局变量引用的数据,将被首先标记为回收,不需要开发者做任何事情.但是,正如Java也会有
内存
泄露一样,
Lua
也会有, 只不过,跟C++的不同,它是由于代码执行所装载的资源,并没有被彻底销毁而导致,其中,最臭名昭著的就是不小心把局部变量声明成了全局变量(忘了加local修饰符)。 类似这样造成的
内存
泄露, 跟任何其他语言的
内存
泄露一样,
Lua
的
内存
泄露
问题
Lua
内存
泄漏 定义:已经没有使用的,但外部依然有引用的对象
lua
垃圾回收机制
lua
的GC使用 Mark And Sweep 标记清除算法 该算法设计了三种颜色标记对象(如树遍历) white 未标记(没有被使用过) gray 已标记、但关联节点未标记 black 已标记、且与之关联的节点都扫描标记了 算法过程:Mark阶段:先将
内存
中所有对象扫描并标记。Sweep阶段:将所有未标记(white)的对象
释放
内存
泄漏形式 (持续更新中) 1.全局变量 因疏忽写出的全局变量,会一直保存
移动开发其他问题
790
社区成员
13,285
社区内容
发帖
与我相关
我的任务
移动开发其他问题
移动平台 其他移动相关
复制链接
扫一扫
分享
社区描述
移动平台 其他移动相关
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章