码迷,mamicode.com
首页 > 其他好文 > 详细

解决luajit ffi cdata引用cdata的问题

时间:2020-01-31 13:59:56      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:tar   func   不能   struct   cal   引用   def   ref   style   

使用luajit ffi会遇到cdata引用cdata的情况。官方说明是必须手动保存所有cdata的引用,否则会被gc掉。

ffi.cdef[[
    struct A { int id; };
    struct B { int id; struct A* a; };
]]

function createB()
    local a = ffi.new("struct A")
    local b = ffi.new("struct B")
    b.a = a
    return b
end

比如上述代码是不能正常运行的。你比如同时持有a和b。这样使用起来非常不方便,一旦c struct层级多了,太麻烦。我上github上问了这个问题,luajit的作者Mike给我提供了几个解决办法。我使用了第2种方法:把所有cdata放到一个chunk里,这样只需要持有一个chunk即可。另外我又实现了一个纯lua的方法,原理是建立一个与c struct结构相同的lua table,把引用都保存到lua table里。代码在这里

解决luajit ffi cdata引用cdata的问题

标签:tar   func   不能   struct   cal   引用   def   ref   style   

原文地址:https://www.cnblogs.com/vkensou/p/12245025.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!