deepcopy引起的LUA記憶體洩露的問題

2021-06-20 19:14:55 字數 984 閱讀 9601

網路遊戲專案中,lua引起的記憶體洩露的一次事故。

在用lua的時候,某種情況下,很多同學都喜歡把物件拿來深度拷貝,雖然我是不太喜歡這麼幹,但專案組開發的同學比較多,也難免別人不會這麼幹。

當乙個table裡存在交叉引用的時候,用deepcopy就會出現嚴重的記憶體洩露,實際證明,deepcopy並不會因為有交叉引用的存在而進入乙個死迴圈,而是成功返回了乙個拷貝物件,但拷貝的資料量非常大,這個可以自己想一下就明白。

當然也可能是因為這個deepcopy函式寫得並不合理,沒有對反向引用做驗證,建議大家盡量不要在專案中用這個東西。

下面的我們專案組deepcopy的原型:

--深度拷貝

function deepcopy(object)

local lookup_table = {}

local function _copy(object)

if type(object) ~= "table" then

return object

elseif lookup_table[object] then

return lookup_table[object]

end -- if

local new_table = {}

lookup_table[object] = new_table

for index, value in pairs(object) do

new_table[_copy(index)] = _copy(value)

end -- for

return setmetatable(new_table, getmetatable(object))

end -- function _copy

return _copy(object)

end -- function deepcopy

感覺,思考,由Lua引起

乙個月以前在google上搜尋 lua 的中文網頁,只能搜尋到介紹 lualua 這個足球運動員的網頁,沒有關於lua語言的。今天再次搜尋,看到了孟巖的 這個網頁,終於有點感覺lua在中國又要開始掀起一股波瀾了。從perl,tcl,python,ruby再到lua,我們一次次的品嚐著大師們烹飪好的美...

「 」,copy,以及deepcopy 的區別

直接上 import copy name hubery alex 1 2,3 4 2 1,1,analic feancy name2 name name3 name.copy 或者copy.copy name name4 copy.deepcopy name 3333 4444 print name...

由strcpy函式引起的C語言動態申請記憶體的問題

大二上學期,曾寫過這樣的一段 include include includeint main 就是利用malloc函式申請了比str1的少空間,然後將str1拷貝到這個空間裡,發現最後可以完整的列印出helllo world來,難道申請的記憶體不僅僅有strlen ptr1 2嗎 一位朋友這樣說的 ...