Загружаются ли скрипты 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/

Другие вопросы по тегам