这里的上下文是嵌入在C ++应用程序中的Lua。

我已经使用功能luaL_loadbuffer()很长时间了,并且工作正常。

但是,现在我需要卸载。我为什么要这样做?

我有要使用Lua脚本初始化的内部C ++映射,但是一旦C ++映射已初始化,就丢弃每个Lua脚本。 Lua表使用更多的内存(C ++为7兆,而C ++为200k),并且无法执行我需要的功能,例如lower_bound()upper_bound()

映射元素是std::pair<uint32_t, uint32_t>,本质上是IP地址,以二进制形式存储。

在执行一次之后,有什么方法可以卸载已经加载到Lua上下文中的Lua代码吗?

最佳答案

如果通过卸载意味着撤消运行某些Lua代码的影响,那么除非您在运行代码之前保存了宝贵的状态,否则就无法做到。这可以通过将代码沙盒化来完成。

如果只想删除Lua表,请将其所有引用都设置为nil,然后自动或手动对表进行垃圾回收。

关于c++ - 如何从Lua上下文中卸载代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27009588/

10-14 16:31
查看更多