從開始用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