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

问题描述:

我偶然发现一个问题,我可以将我的代码成功保存到ESP8266的闪存中,但一旦启动,我就会收到“内存不足”的错误。Lua脚本是在执行前加载到内存中的吗?

代码本身不会创建很多对象。在我看来,代码本身就是问题。所以我想知道在执行过程中完整的代码是否会以纯文本的形式加载到RAM中。

我也试过在我的Esplorer中编译&上传按钮,这似乎没有太大的改变。
编译Lua实际上减少了代码大小多少?我会认为至少所有的空白空间都会消失。

是的,脚本在执行前被加载到ram中。
如果Lua源代码是纯文本,需要更多内存,因为Lua虚拟机必须将其编译为字节码。一般来说,您可以在目标Lua VM之外预编译Lua源代码,请参见http://www.eluaproject.net/doc/v0.8/en_using.html,“交叉编译您的eLua程序”一节
而您将希望在调试信息被剥离的情况下进行编译。请参阅luac-s选项。

我们有交叉编译的Lua为ESP8266您的计算机上以https://nodemcu.readthedocs.io/en/dev/en/upload/#compiling-lua-on-your-pc-for-uploading

一章此外,如果你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