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