level 1
使用swig 将 接口文件转为lua 的动态库
大致代码如下:
结构体大概是这样
strut A {
struct B * b;
....
}
local A = newA() // 泛指new, 该函数有calloc 申请了一个对象A 这个函数是在swig 转换生成的 _wrap.c 文件中
local B = newB() // 该函数有calloc 申请了一个对象B
A.b = B
A.b = nil
B = nil
collectgarbage("collect")
回收内存的时候发现B 的内存根本不会被回收,写了一个循环 ,内存暴涨
求救该怎么解决
2019年04月10日 12点04分
1
level 8
Lua只会收自己能控制的吧,这只是一个引用,Lua根本不知道它能回收,不知道是不是这样
2019年04月10日 15点04分
2
就是如果没有 A.b = B 这个赋值语句的话,我看到lua 是可以正常回收的,不知道是不是和swig 的转码有关系,我看swig 转的 wrap.c 文件是用calloc 来实现的,是不是赋值之后,就被当成C的动态内存来管理了···
2019年04月11日 02点04分