问题描述
我有一个很长的飞行程序,它是一个播放器.启动后,它将通过服务器的命令从网络加载和运行 Lua 代码.每个代码都有一个唯一的命名模块.
每天,它需要加载串行不同的代码(即 Lua 模块)并运行它们.担心时间长了内存会溢出...
所以,我的问题是:Lua 模块可以删除吗?不再使用的模块我想放弃它.
对于用 Lua 编写的模块,将 package.loaded
中的条目设置为 nil 可能会起作用.但是,它是一种hack,不应该用于任意模块(尤其是C 模块)
来自 LuaJIT 的开发者 Mike Pall:
实际上,没有安全的方法可以卸载任意模块,即使对于普通的 Lua.C 模块可能相互依赖并卸载他们以错误的顺序会造成严重破坏.如果还有一个带有 __gc C 函数的 userdata 并删除共享使用上述方法从地址空间中获取库...猜测会发生什么.
对于您的情况,请考虑不使用 module
和 require
,而是使用诸如 loadstring
之类的函数制作自己的更简单的系统>
I have a long time fly program, it is a player. After it started, it will load and run Lua code from net by the server's command. Each code have a unique named module.
Every day, it need load serial different code (i.e Lua modules) and run them. I worried the memory will overflow after a long time...
So, my questions is: does a Lua module can be drop? no longer used module I want drop it.
For modules written in Lua, setting the entry in package.loaded
to nil would probably work. However, it is a hack, and shouldn't be used for arbitrary modules (especially C modules)
From Mike Pall, developer of LuaJIT:
For your case, consider not using module
and require
, and instead make your own, simpler system that utilizes functions like loadstring
这篇关于如何删除 Lua 模块的所有代码和内存空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!