我很困惑,如果我需要在以下场景中清理内存?
我有一个C函数,它创建一个C结构并将其传递给Go函数。 C结构包含一个值数组(使用指针算术)。 Go函数填充此数组并返回。在调用C函数中,我将值复制出C结构,不存储它们。
因为这是在Go中创建的,这个垃圾收集了吗?
/*
C code
*/
int go_func(c_struct *s);
struct c_struct{
val *values;
size_t *values_cnt;
};
void example_call()
{
struct c_struct s;
go_func(&s)
copy_values(s)
}
/*
go code
*/
func go_func(c *C.c_struct){
var varr *C.val
var v C.val = createValues()
C.set_val_in_array(varr, *v, C.size_t(0))
c.values = varr
}
答案 0 :(得分:1)
是的,在Go中创建内存时,肯定会在Go中收集垃圾。