如何从 Lua 上下文中卸载代码。

这里的背景是 Lua 嵌入在 C++ 应用程序中。

我一直使用 luaL_loadbuffer() 函数,它运行良好。

然而,现在我有卸载的需求。为什么需要这么做呢?

我有一些内部的 C++ 映射,我想要用 Lua 脚本来初始化,但是一旦 C++ 映射被初始化了,就要丢弃每个 Lua 脚本。Lua 表使用了更多的内存(7MB 对于 C++ 的 200k),也无法执行我所需的 lower_bound()upper_bound() 这样的函数。

地图元素是 std::pair<uint32_t, uint32_t>,实际上是以二进制形式存储的 IP 地址。

有没有办法在 Lua 上下文中执行一次后卸载已经加载的 Lua 代码?

点赞
用户107090
用户107090

如果你说的“卸载”是撤销运行某些 Lua 代码的效果,那么除非在运行代码之前保存重要的内容状态,否则无法完成。可以通过沙箱技术实现这一点。

如果你只是想删除一个 Lua 表,那么将其所有的引用设置为 nil,然后让表被自动或手动垃圾回收即可。

2014-11-19 11:05:07