寫 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

 

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