CGO我传递的是一个带有指向go函数值的指针的C结构,

时间:2017-02-02 10:46:56

标签: c go memory-leaks cgo

我很困惑,如果我需要在以下场景中清理内存?

我有一个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
}

1 个答案:

答案 0 :(得分:1)

是的,在Go中创建内存时,肯定会在Go中收集垃圾。