cgo中的垃圾收集
Garbage collection in cgo
我在使用 cgo 的 Go 中有以下代码:
func foo() {
bar := new(C.struct_bar)
...
}
函数执行完毕后 bar 会被垃圾回收吗?还是我需要显式调用 free?
是的,虽然struct_bar
是C类型,但是内存是Go分配的,会被Go回收。
然而,在 C 中分配的任何内存都不会被 Go GC 跟踪。 C 代码应该自己管理它,但是在像 C.CString
这样 Go 触发分配的情况下,您必须使用 C.free
.
手动释放内存
我在使用 cgo 的 Go 中有以下代码:
func foo() {
bar := new(C.struct_bar)
...
}
函数执行完毕后 bar 会被垃圾回收吗?还是我需要显式调用 free?
是的,虽然struct_bar
是C类型,但是内存是Go分配的,会被Go回收。
然而,在 C 中分配的任何内存都不会被 Go GC 跟踪。 C 代码应该自己管理它,但是在像 C.CString
这样 Go 触发分配的情况下,您必须使用 C.free
.