首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除Lua模块的所有代码和内存空间

如何删除Lua模块的所有代码和内存空间
EN

Stack Overflow用户
提问于 2013-08-07 07:35:52
回答 2查看 4.7K关注 0票数 1

我有一个很长的飞行计划,它是一个球员。启动后,它将通过服务器命令从网络加载和运行Lua代码。每个代码都有一个唯一的命名模块。

每天,它需要加载串行不同的代码(即Lua模块)并运行它们。我担心很长一段时间后记忆会溢出..。

那么,我的问题是: Lua模块可以删除吗?不再使用模块,我想放下它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-07 17:36:31

对于用Lua编写的模块,可能会将package.loaded中的条目设置为零。但是,它是一个黑客,不应该用于任意模块(特别是C模块)。

来自Mike,LuaJIT的开发者:

实际上,没有安全的方法来卸载任意模块,即使是普通的Lua。C模块之间可能相互依赖,以错误的顺序卸载它们将造成巨大的破坏。如果仍然有一个带有__gc C函数的用户数据,并且使用上面的方法从地址空间中删除共享库.猜猜会发生什么。

来源

就您的情况而言,考虑不要使用modulerequire,而是使用loadstring之类的函数来创建自己的更简单的系统。

票数 2
EN

Stack Overflow用户

发布于 2013-08-07 07:43:04

Lua中的模块只是另一个表,其中包含所有函数和变量。如果将其设置为零并删除package.loaded中的条目,则应由垃圾收集器清除。

下面是一个实现模块卸载的函数:http://lua-users.org/lists/lua-l/2009-03/msg00587.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18097333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档