Мне нужен объект состояния игры в lua (не C++ или привязан к C++) для управления огнями, камерами, объектами, событиями из моего движка C++ (объекты lua представляют собой отдельные сущности из C++, в значительной степени только стандартные таблицы lua) , Меня беспокоит то, как GC собирается действовать при удалении этих объектов, поскольку они будут созданы и удалены «на лету». Каков наилучший способ включения Output для GC? У меня есть источник lua, встроенный в мой код ...Каков наилучший способ для вывода отладки для сборщика мусора lua?
ответ
Мусороуборочный комбайн Lua не имеет выхода. Здесь у вас есть два выбора.
Во-первых, вы можете предоставить Lua пользовательский распределитель. Это позволит вам отслеживать, как и когда Lua выделяет и освобождает память. Это расскажет, как часто GC запрашивает больше памяти и как часто она освобождает память. Вы также можете добавить отслеживание распределения, которое позволит вам обнаружить «утечку» памяти при выходе приложения.
Поскольку у вас есть источник, вы также можете добавить приборы непосредственно в код сборщика мусора Lua. Он сам содержится в lugc.c.
Вы прочитали руководство Lua?
Объекты Lua полностью скрыты со стороны C++, поэтому вы должны поместить каждый объект Lua в специальную хеш-таблицу и удалить ее там, когда вы уничтожаете объект C++. Если объекты C++ и Lua имеют одинаковое время жизни, вы можете просто сделать этот код в ctor/dtor.
Если вы хотите получить отладочный вывод для GC, я думаю, вы должны добавить строки printf непосредственно в исходный код lua, так как в стандартном коде Lua отсутствует код для AFAIK.
Хороший ответ! это именно то, что я искал. – Joe