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

我遇到了一个问题,我能够将我的代码成功保存到 ESP8266 的闪存中,但是一旦开始执行就会出现“内存不足”的错误。

代码本身并不会创建大量的对象。对我来说,问题似乎在于代码大小本身。所以我想知道在执行期间完整的代码是否以纯文本形式加载到 RAM 中。

我还尝试了我的 Esplorer 中的编译和上传按钮,但似乎并没有什么变化。

编译 Lua 实际上会减小多少代码大小?我本以为至少所有的空格开销都会消失。

点赞
用户5675002
用户5675002

翻译

是的,在执行前脚本会被加载到 RAM 中。

如果 Lua 源代码是普通文本格式,则需要更多的 RAM,因为 Lua 虚拟机需要将其编译成字节码。通常情况下,您可以在目标 Lua 虚拟机外预编译 Lua 源代码,请参见这里中的“交叉编译 eLua 程序”一节。

同时,您需要使用 luac 的 -s 选项将调试信息剥离。

Markdown

是的,在执行前脚本会被加载到 RAM 中。

如果 Lua 源代码是普通文本格式,则需要更多的 RAM,因为 Lua 虚拟机需要将其编译成字节码。通常情况下,您可以在目标 Lua 虚拟机外预编译 Lua 源代码,请参见这里中的“交叉编译 eLua 程序”一节。

同时,您需要使用 luac 的 -s 选项将调试信息剥离。

2017-04-12 16:16:07
用户131929
用户131929

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

此外,如果您结合node.stripdebug()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

2017-04-12 19:11:42