Lua脚本是否在执行前加载到内存中?

时间:2017-04-12 13:11:08

标签: lua ram esp8266 nodemcu esplorer

我偶然发现了一个问题,我可以将我的代码成功保存到ESP8266的闪存中,但是一旦启动我就会得到一个"没有足够的内存"错误。

代码本身并没有创建很多对象。在我看来,好像代码大小本身就是问题。所以我想知道完整的代码是否会在执行期间以纯文本形式加载到RAM中。

我也尝试过编译&我的Esplorer中的上传按钮,似乎没什么变化 编译Lua实际上减少了多少代码大小?我原以为至少所有的空白开销都会消失。

2 个答案:

答案 0 :(得分:2)

是的,脚本在执行前加载到ram中 如果Lua源是纯文本,则需要更多ram,因为Lua VM必须将其编译为字节码。一般情况下,您可以在目标Lua VM之外预编译Lua源代码,请参阅http://www.eluaproject.net/doc/v0.8/en_using.html,“交叉编译您的eLua程序”部分。
您需要编译并删除调试信息。请参阅-s的{​​{1}}选项。

答案 1 :(得分:2)

我们在https://nodemcu.readthedocs.io/en/dev/en/upload/#compiling-lua-on-your-pc-for-uploading

上为您的计算机上的ESP8266交叉编译Lua

此外,如果您combine node.stripdebug() with node.compile()(即在设备上进行编译),您还可以减少应用程序的内存占用量。

  

如果您使用require("XXX")加载代码,则会自动搜索XXX.lc,然后XXX.lua

来源:https://nodemcu.readthedocs.io/en/latest/en/lua-developer-faq/#how-do-i-reduce-the-size-of-my-compiled-code