Загружаются ли скрипты Lua в память перед выполнением?
Я столкнулся с проблемой, когда я могу успешно сохранить свой код на флэш-памяти ESP8266, но как только он запускается, я получаю ошибку "недостаточно памяти".
Сам код не создает много объектов. Мне кажется, что размер кода сам по себе является проблемой. Поэтому мне было интересно, будет ли весь код фактически загружаться в ОЗУ в виде простого текста во время выполнения.
Я также попробовал кнопку компиляции и загрузки в Esplorer, которая, похоже, не сильно изменилась.
На сколько компиляция Lua фактически уменьшает размер кода? Я бы подумал, что по крайней мере все пустое пространство над головой исчезнет.
2 ответа
Да, скрипт загружается в оперативную память перед выполнением.
Требуется больше оперативной памяти, если исходный текст Lua представляет собой простой текст, поскольку Lua VM должна будет скомпилировать его в байт-код. В общем, вы можете предварительно скомпилировать исходный код Lua вне целевой Lua VM, см. http://www.eluaproject.net/doc/v0.8/en_using.html, раздел "Кросс-компиляция ваших программ eLua"
И вы захотите скомпилировать с удаленной отладочной информацией. Увидеть -s
вариант luac
,
У нас есть глава о кросс-компиляции Lua для ESP8266 на вашем компьютере по адресу https://nodemcu.readthedocs.io/en/dev/en/upload/.
Кроме того, если вы объединяете node.stripdebug()
с node.compile()
(т.е. компиляция на устройстве), вы также можете уменьшить объем памяти вашего приложения.
если вы используете
require("XXX")
загрузить ваш код, то это будет автоматически искатьXXX.lc
затемXXX.lua
Источник: https://nodemcu.readthedocs.io/en/latest/en/lua-developer-faq/