我必须释放使用 Cgo 创建的结构吗?
Do I have to free structs created with Cgo?
我在 Go 代码中创建 C 结构,如下所示:
var data C.MyStruct_t
我是否必须在某些时候手动释放它们,就像我在使用 CString 时所做的那样?使用 CString 我经常做类似的事情:
ctitle := C.String(title)
defer C.free(unsafe.Pointer(&ctitle))
C.my_func(&ctitle)
没有。你只调用 free
通过 C *alloc
函数分配的东西。 C.CString
和 C.CBytes
函数在内部记录为这样做,并且需要使用 C.free
.
在这种情况下,即使 data
是 C.MyStruct_t
类型,它也是在 Go 中分配的,因此将由 Go 垃圾收集器处理。
我在 Go 代码中创建 C 结构,如下所示:
var data C.MyStruct_t
我是否必须在某些时候手动释放它们,就像我在使用 CString 时所做的那样?使用 CString 我经常做类似的事情:
ctitle := C.String(title)
defer C.free(unsafe.Pointer(&ctitle))
C.my_func(&ctitle)
没有。你只调用 free
通过 C *alloc
函数分配的东西。 C.CString
和 C.CBytes
函数在内部记录为这样做,并且需要使用 C.free
.
在这种情况下,即使 data
是 C.MyStruct_t
类型,它也是在 Go 中分配的,因此将由 Go 垃圾收集器处理。