2015-10-14 2 views
2


Я занимаюсь Love2D с помощью Lua и только что реализовал StateMachine для обработки переходов между множеством состояний, например. IntroState, MenuState, PlayState и т. Д.Как получить «sizeof» таблицу в Lua?

В предыдущих программах я обычно освобождаю объекты и/или состояния, которые являются только «разовой сделкой», которые будут представлены игроку один раз в течение всего срока действия приложения , В C++ я использую оператор sizeof, который возвращает размер в байтах переданного объекта, чтобы получить некоторую обратную связь о том, сколько памяти я выпускаю в определенный момент.

Есть ключевое слово или уловка в Lua для достижения этой цели?

+1

Существует [getize] (https://github.com/siffiejoe/lua-getsize), внешний модуль, который может это сделать. Это только для PUC-Rio Lua (без LuaJIT), поскольку он обращается к внутренним структурам данных. Тем не менее, Lua будет хранить память об объектах до тех пор, пока они не будут недоступны * и * сборщик мусора восстановит их, и это может быть намного позже, поэтому такая обратная связь не имеет особого смысла в Lua. – siffiejoe

ответ

2

Если вам нужна мелкозернистая информация, вы можете использовать getsize как @siffiejoe, упомянутый в сочетании с некоторым обходом таблицы, чтобы добраться до всех локальных и глобальных объектов. Если вам нужен более грубый подход, вы можете использовать collectgarbage('count'), чтобы получить общую память, используемую Lua.

This SO answer и this lua discussion on memory tracking могут быть полезны. Обратите внимание, что у вас нет контроля над выпуском памяти, поскольку он обрабатывается сборщиком мусора (хотя есть несколько настроек GC, которые вы можете настроить).