【问题标题】:How do I unload code from a Lua context如何从 Lua 上下文中卸载代码
【发布时间】:2014-11-19 19:05:07
【问题描述】:

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

luaL_loadbuffer()这个功能我用了很久了,很好用。

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

我有想用 Lua 脚本初始化的内部 C++ 映射,但是一旦初始化 C++ 映射,就扔掉每个 Lua 脚本。 Lua 表使用更多的内存(7 megs vs. C++ 的 200k)并且不能执行我需要的 lower_bound()upper_bound() 之类的功能。

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

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

【问题讨论】:

  • 我认为删除所有对加载的 lua 的引用并让垃圾收集器完成其工作会很好。拆除 lua 状态并重新创建它也可以,尽管这有点像核选项。

标签: c++ memory-management lua


【解决方案1】:

如果 unload 是指撤消运行某些 Lua 代码的影响,那么除非在运行代码之前保存珍贵的状态,否则无法完成。这可以通过对代码进行沙箱处理来完成。

如果你只是想删除一个 Lua 表,请将所有对它的引用设置为 nil,并让该表自动或手动进行垃圾收集。

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 2019-06-20
    • 2012-06-22
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多