網路遊戲專案中,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嗎 一位朋友這樣說的 ...