Lua 个脚本在执行前是否已加载到内存中?
Are Lua scripts loaded into the memory before execution?
我偶然发现了一个问题,我能够成功地将我的代码保存到 ESP8266 的闪存中,但是一旦它启动,我就会收到 "not enough memory" 错误。
代码本身不会创建很多对象。在我看来,代码大小本身就是问题所在。所以我想知道完整的代码是否会在执行期间以纯文本形式实际加载到 RAM 中。
我也尝试了 Esplorer 中的编译和上传按钮,似乎没有太大变化。
编译 Lua 实际减少了多少代码大小?我本以为至少所有的白色 space 开销都会消失。
是的,脚本在执行之前加载到 ram 中。
如果 Lua 源代码是纯文本,则需要更多内存,因为 Lua VM 必须将其编译成字节码。通常,您可以在目标 Lua VM 之外预编译 Lua 源代码,请参阅 http://www.eluaproject.net/doc/v0.8/en_using.html,第 "Cross-compiling your eLua programs"
部分并且您将希望在删除调试信息的情况下进行编译出去。请参阅 luac
的 -s
选项。
我们在您的计算机 https://nodemcu.readthedocs.io/en/dev/en/upload/#compiling-lua-on-your-pc-for-uploading
上有一章关于 ESP8266 的交叉编译 Lua
此外,如果您 combine node.stripdebug()
with node.compile()
(即在设备上编译),您还可以减少应用程序的内存占用。
if you use require("XXX")
to load your code then this will automatically search for XXX.lc
then XXX.lua
我偶然发现了一个问题,我能够成功地将我的代码保存到 ESP8266 的闪存中,但是一旦它启动,我就会收到 "not enough memory" 错误。
代码本身不会创建很多对象。在我看来,代码大小本身就是问题所在。所以我想知道完整的代码是否会在执行期间以纯文本形式实际加载到 RAM 中。
我也尝试了 Esplorer 中的编译和上传按钮,似乎没有太大变化。
编译 Lua 实际减少了多少代码大小?我本以为至少所有的白色 space 开销都会消失。
是的,脚本在执行之前加载到 ram 中。
如果 Lua 源代码是纯文本,则需要更多内存,因为 Lua VM 必须将其编译成字节码。通常,您可以在目标 Lua VM 之外预编译 Lua 源代码,请参阅 http://www.eluaproject.net/doc/v0.8/en_using.html,第 "Cross-compiling your eLua programs"
部分并且您将希望在删除调试信息的情况下进行编译出去。请参阅 luac
的 -s
选项。
我们在您的计算机 https://nodemcu.readthedocs.io/en/dev/en/upload/#compiling-lua-on-your-pc-for-uploading
上有一章关于 ESP8266 的交叉编译 Lua此外,如果您 combine node.stripdebug()
with node.compile()
(即在设备上编译),您还可以减少应用程序的内存占用。
if you use
require("XXX")
to load your code then this will automatically search forXXX.lc
thenXXX.lua