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.

手动释放内存