[問題] 記憶體回收循環檢查

看板C_and_CPP (C/C++)作者 (咕咕)時間14年前 (2011/09/17 20:52), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
問題(Question): 不曉得在此地發這篇文適合否,本身是社會新鮮人, 目前第一次用lua開發遊戲,但lua幾乎沒有中文討論區, 而lua也是用c編譯,所以發個觀念的疑問, 進入主題↓ lua的gc是一種循環檢查,到某個時間點會去找不再被用到記憶體 譬如 a = self:create_child('a','Classname') 此時a算是一個指標(有誤請鞭), 指向上列程式碼編譯後會分配一個記憶體位置(大小看Class) 如果當a不再指向該記憶體位置,此時那個位置是沒有任何"參考"(有誤請鞭) 過一陣子該記憶體位置就會被釋放(?) 但是當一直分配記憶體,用完後取消參考, 理想中該程式總記憶體使用量應該是會維持在同一個水平, 而我現在的問題就是,一直分配、釋放數萬次後, 記憶體使用量就爆了,被強制殺了T_T 其實中間是有透過SDK,所以或許SDK也會有問題? 想問問各位高強程式員,是我觀念有誤呢,還是哪裡出了問題, PS.發文如有不妥,煩請告知。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.40.204.223

09/17 22:28, , 1F
你配置的是 userdata 對吧
09/17 22:28, 1F

09/17 22:30, , 2F
因為 userdata 實際上是用 C/C++ 配置來的
09/17 22:30, 2F

09/17 22:30, , 3F
所以你要去定義 userdata 的 finalizer
09/17 22:30, 3F

09/17 22:31, , 4F
讓 Lua 在回收它的時候,呼叫 C/C++ 的釋放函式
09/17 22:31, 4F

09/18 02:24, , 5F
哦~ 我想過Lua最終還是要透過c 或許是這中間出了點問
09/18 02:24, 5F

09/18 02:24, , 6F
題,感謝您的回答,具體實作我還要再研究下。
09/18 02:24, 6F
文章代碼(AID): #1ET9WH4T (C_and_CPP)
文章代碼(AID): #1ET9WH4T (C_and_CPP)