2009-11-09 48 views
2

我需要一個遊戲狀態對象in lua(不是C++或綁定到C++)來管理燈光,攝像頭,對象,來自我的C++引擎的事件(lua對象是來自C++的獨立實體,幾乎只是標準的lua表) 。我擔心GC將如何去除這些對象,因爲它們將在運行中被創建和刪除。打開GC輸出的最佳方式是什麼?我在我的代碼中嵌入了lua源代碼...lua垃圾回收器調試輸出的最佳方式是什麼?

回答

4

Lua垃圾收集器沒有任何輸出。你有兩個選擇。

首先,您可以爲Lua提供一個自定義分配器。這將讓你跟蹤Lua如何以及何時分配和釋放內存。這將告訴GC如何多次請求更多的內存以及釋放內存的頻率。您還可以添加分配跟蹤,以便在應用程序退出時檢測「泄漏」的內存。

既然你有源代碼,你也可以直接在Lua垃圾收集器代碼中添加工具。它自己包含在lugc.c中。

+0

不錯的答案!這正是我所期待的。 – Joe 2009-11-24 20:52:21

-1

您是否閱讀過Lua手冊?

Lua對象完全隱藏在C++端,因此您必須將每個Lua對象放入一個特殊的哈希表中,並在您銷燬C++對象時從其中刪除它。如果C++和Lua對象具有相同的生命週期,則可以簡單地在ctor/dtor中執行此代碼。

如果你想要一些調試輸出的GC我想你必須添加printf行直接到lua源代碼中,因爲在標準Lua代碼庫中沒有AFAIK代碼。