我有一个很长的飞行计划,它是一个球员。启动后,它将通过服务器命令从网络加载和运行Lua代码。每个代码都有一个唯一的命名模块。
每天,它需要加载串行不同的代码(即Lua模块)并运行它们。我担心很长一段时间后记忆会溢出..。
那么,我的问题是: Lua模块可以删除吗?不再使用模块,我想放下它。
发布于 2013-08-07 17:36:31
对于用Lua编写的模块,可能会将package.loaded中的条目设置为零。但是,它是一个黑客,不应该用于任意模块(特别是C模块)。
来自Mike,LuaJIT的开发者:
实际上,没有安全的方法来卸载任意模块,即使是普通的Lua。C模块之间可能相互依赖,以错误的顺序卸载它们将造成巨大的破坏。如果仍然有一个带有__gc C函数的用户数据,并且使用上面的方法从地址空间中删除共享库.猜猜会发生什么。
来源
就您的情况而言,考虑不要使用module和require,而是使用loadstring之类的函数来创建自己的更简单的系统。
发布于 2013-08-07 07:43:04
Lua中的模块只是另一个表,其中包含所有函数和变量。如果将其设置为零并删除package.loaded中的条目,则应由垃圾收集器清除。
下面是一个实现模块卸载的函数:http://lua-users.org/lists/lua-l/2009-03/msg00587.html
https://stackoverflow.com/questions/18097333
复制相似问题