luajit ffi string垃圾收集

时间:2016-08-15 09:32:59

标签: lua garbage-collection ffi luajit

我试图找到一种方法来防止我的字符串被gc收集。我使用的是一个小结构,并使用下面的代码填充它。理想情况下,表本身将移动到ffi结构但我还没有(我怀疑那时我的所有结构都将被gc编辑)。我可以使用静态大小来解决,但考虑到我可能转移到ffi的记录和其他类似结构的数量,这将浪费大量RAM。

local ffi = require("ffi")
ffi.cdef[[
typedef struct {
    uint8_t     ctype;
    uint16_t    freq;
    char*       name;
    char*       icao;
} s_frq;
]]

local s_frq = ffi.typeof("s_frq")

[...]
local frq   = s_frq()
frq.ctype   = tonumber(fields[1])
frq.freq    = freq
frq.icao    = ffi.new("char[?]", #icao+1, icao)
frq.name    = ffi.new("char[?]", #name+1, name)
db_apt[icao].freqs[#db_apt[icao].freqs+1] = frq

我在某处读过:

  

后者。 GC不遵循指针。仅来自的参考   考虑局部变量,upvalues,Lua表等。这也是   表示您不能存储对分配的对象的唯一引用   使用ffi.new()作为struct字段中的指针。

然后我无法弄清楚我应该在哪里存储我的指针。创建一个lua表来将它们与我的ffi struc并排存储会破坏不使用大型lua表的目的(因为主机应用程序 - X-Plane - 如果接收到大于32MB的alloc请求将崩溃)。

0 个答案:

没有答案