lua内存泄漏 - pxqwxl/myLearnPoject GitHub Wiki
(2)Lua的内存泄露
有时在游戏中需要重新登录,这时比较常用的处理方式是把CCLuaEngine::defaultEngine()指针指向的部分删除,但是,这种粗暴的方式可能会造成一些内存泄露,需要在前面加入如下代码:
1
2
3
4
pEngine->getLuaStack()->clean();
lua_State *tolua_s = pEngine->getLuaStack()->getLuaState();
lua_close(tolua_s);
tolua_s = NULL;
也就是说先要把栈中数据删掉。
(3)lua中table可能的内存泄露
一般情况下,直接“table = nil”,在经过垃圾回收器的回收内存(lua这点类似java),就可以释放内存了,但是,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理。这样就极有可能导致很多垃圾对象无法被释放。这种情况就是交叉引用
1
2
3
4
local table1 = {}
local table2 = {}
table2[1] = 1
table1[table2[1]] = 1
这种情况下在table2[1]被释放前table1[table2[1]]不会释放。