2017-04-12 86 views
2

我偶然發現一個問題,我可以將我的代碼成功保存到ESP8266的閃存中,但一旦啓動,我就會收到「內存不足」的錯誤。Lua腳本是在執行前加載到內存中的嗎?

代碼本身不會創建很多對象。在我看來,代碼本身就是問題。所以我想知道在執行過程中完整的代碼是否會以純文本的形式加載到RAM中。

我也試過在我的Esplorer中編譯&上傳按鈕,這似乎沒有太大的改變。
編譯Lua實際上減少了代碼大小多少?我會認爲至少所有的空白空間都會消失。

回答

2

是的,腳本在執行前被加載到ram中。
如果Lua源代碼是純文本,需要更多內存,因爲Lua虛擬機必須將其編譯爲字節碼。一般來說,您可以在目標Lua VM之外預編譯Lua源代碼,請參見http://www.eluaproject.net/doc/v0.8/en_using.html,「交叉編譯您的eLua程序」一節
而您將希望在調試信息被剝離的情況下進行編譯。請參閱luac-s選項。

2

我們有交叉編譯的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