Есть ли способ в Lua определить (в памяти) размер объекта?
Я нашел статью на Gamepedia о размерах памяти объектов Lua, но она не является общей и точной.
Есть ли способ в Lua определить (в памяти) размер объекта?
Я нашел статью на Gamepedia о размерах памяти объектов Lua, но она не является общей и точной.
Я бы дал то же объяснение, что и @NicolBolas, но разные ответы на вопросы.
Есть ли способ в Lua определить (в памяти) размер объекта?
Да, но для этого вам может понадобиться внешний модуль. См. мой предыдущий ответ и, в частности, lua-getsize.
Есть ли способ в Lua определить, превышает ли сохраняемая таблица размер MP?
Если вы знаете размер таблицы с элементами X, вы, вероятно, можете экстраполировать на таблицу с элементами Y примерно того же содержания, но вы не сможете ограничить выделение до определенного размера, если вы не используете свой собственный распределитель, который имеет это логика.
Есть ли способ в Lua определить, превышает ли сохраняемая таблица размер MP?
No.
Есть ли способ в Lua определить (в памяти) размер объекта?
No.
Lua не отвечает за такие вещи, как ограничение памяти и так далее. Это должно быть обработано из кода C, который создает и управляет состоянием Lua. Так что, если у вас есть ограничение в 16 МБ, то это нужно встроить в lua_State
при вызове lua_newstate
. Вы передаете ему функцию распределения, которая должна отслеживать все такие распределения. Это также будет выделять память из пула памяти, а не из кучи.
Конечно, распределитель не может точно сказать, почему происходит выделение. Таким образом, нет способа ограничить только эту конкретную таблицу размером 16 МБ, если вы хотите, чтобы состояние Lua также выполняло другие действия.
Если у вас есть такие специфические потребности в памяти только для этой одной таблицы, вам, вероятно, потребуется выделить и сохранить ее в C/C++, а затем использовать интерфейс Lua, чтобы открыть ее в Lua для чтения/манипулирования.
lua_tostring
(или аналогичный), чтобы получить фактические строковые данные из lua для их хранения? - person Etan Reisner   schedule 08.01.2016