从开始用lua到现在,也有一年多时间,作为脚本语言,很简单,基本属于1天入门,3天熟练,5天精通;
从接触lua起,就有固定的思维模式:这是一门自动化内存管理的脚本语言;
于是乎,我自然而然地认为,lua不会存在内存泄漏的问题;
直到我自己写出内存泄漏的lua代码。。。
--示例
--先声明,我知道发生了内存泄漏,但我并不知道内部是什么原理导致泄漏
--[[
--表形式如下
local t = {
person={
name=xxx,
age=xxx,
},
}
--]]
--假设t中有1000条记录
--此时我们需要循环删除某些节点
for k,v in pairs(t) do
if v.age < 12 then
v=nil -- 造成内存泄漏的位置
end
end
--有时候看起来这代码好像并没啥问题
--语言内部自动内存管理
--释放内存时
--就是把变量置为nil
--然而这种写法是不允许的
--不懂内部如何处理
--就不多分析了
--改成以下写法即可
local needDel={}
for k,v in pairs(t) do
table.insert(needDel,k)
end
for k,v in ipairs(needDel) do
t[v] = nil -- 正确写法
end