写 lua 脚本时遇到的内存泄漏案例

从开始用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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章