Lua 全局变量会自动回收?

tjunxin 2012-11-08 10:40:58
今天在客户端的lua脚本中,定义了一个全局的嵌套 table,如下
tips =
{
{forge = "打造", x1 = 100, y1 = 100,width = 200,arrow = "arrowSelect",x2 = 100,y2 = 300},
{forge = "升星", x1 = 100, y1 = 100,width = 200,arrow = "arrowSelect",x2 = 100,y2 = 300}
-- 省略N行
};
结果在下面的函数中访问 tips时,发现刚开始都OK,过段时间测试函数就没有效果了,感觉像没有执行一样;reload一下脚本,又是刚开始OK,过会儿不行了。由于无法下断点,只能猜测这个 tips是不是过段时间就被垃圾回收了。
刚开始用lua,一知半解啊,请大哥们指点一二!!!!不盛感激!
...全文
703 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿高 2012-12-14
  • 打赏
  • 举报
回复
楼上正解 全局变量不会被收回,这是常理。 你说的测试函数没有效果了,但是这个函数没有效果的时候你可以测试一个tips的值是不是正确。 插断点的话,如果宿主程序是Debug版本就可以插断点调试
yaoyue1019 2012-11-27
  • 打赏
  • 举报
回复
如果是按你这个情况说来是不会回收的 回收要求 一、不被任何地方所引用 二、使用弱键或弱值并且执行回收操作 情况一看来 如果是全局变量 那肯定被_G引用 所以不会被回收 情况二看来 你用的不是弱值也不是弱键 所以不会被回收 从其他地方找一下BUG吧
tkminigame 2012-11-23
  • 打赏
  • 举报
回复
我不了解lua,但是全局变量岂有被自动回收之理,真正的原因应该是哪步对全局变量做了赋值处理。应该继续复现和定位该bug.
ckc 2012-11-23
  • 打赏
  • 举报
回复
你后面如果有代码用到了这个表,按理说不会被回收的
leonwei 2012-11-22
  • 打赏
  • 举报
回复
一个全局变量的值只有在没有任何符号指向他时才会回收,即指向这个值的所有变量都置位nil才会回收。lz多用print查查是不是tips在过程中发生了什么改变
彩阳 2012-11-19
  • 打赏
  • 举报
回复
是不是访问过于频繁导致暂时无法读取?
  • 打赏
  • 举报
回复
我没用过LUA啊,是看没人答话才顶楼主的。 Lua 5.0 参考手册中有这么一段话: Lua 会自动进行内存管理。这意味着你不需要担心新对象的内存分配问题,也不需要释放不用的对象。Lua 通过不断地运行 垃圾收集器 收集 dead objects (也就是那些Lua中无法访问的对象)来自动管理内存。Lua中所有的对象都是自动管理的目标:表,用户数据,函数,线程,和字符串。Lua使用两个数字控制垃圾收集循环。一个数字表示Lua使用的动态内存的字节数,另一个是阀值。当内存字节数到达阀值时,Lua就运行垃圾收集器,来释放死对象的空间。一旦字节计数器被调整,那么阀值就会被设为字节计数器新值的两倍。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧