此处的上下文是嵌入在 C++ 应用程序中的 Lua。
我使用了函数luaL_loadbuffer()
很长一段时间,它工作正常。
但是,现在我有卸载的需求。我为什么要这样做?
我有内部 C++ 映射,我想用 Lua 脚本对其进行初始化,但是一旦 C++ 映射被初始化,我就会丢弃每个 Lua 脚本。 Lua 表使用更多的内存(7 兆与 C++ 的 200k)并且不能执行像 lower_bound()
这样的功能。和 upper_bound()
我需要的。
map 元素是std::pair<uint32_t, uint32_t>
,本质上是以二进制形式存储的 ip 地址。
有什么方法可以在执行一次后卸载已加载到 Lua 上下文中的 Lua 代码?
最佳答案
如果unload 是指撤消运行某些 Lua 代码的效果,那么除非您在运行代码之前保存宝贵的状态,否则无法完成。这可以通过对代码进行沙盒处理来完成。
如果你只是想删除一个 Lua 表,将所有对它的引用设置为 nil 并让该表自动或手动进行垃圾回收。
关于c++ - 如何从 Lua 上下文中卸载代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27009588/