Memory management cgo中的垃圾收集

Memory management cgo中的垃圾收集,memory-management,go,cgo,Memory Management,Go,Cgo,我有以下使用cgo的Go代码: func foo() { bar := new(C.struct_bar) ... } 在函数完成其执行后,bar是否会被垃圾收集,或者我需要显式地调用free?是的,即使结构\u bar是C类型,内存也是通过Go分配的,并且将通过Go收集 但是,Go GC不会跟踪在C中分配的任何内存。C代码应该自己管理它,但是在像C.CStringwhere Go触发分配的情况下,如果我使用point:=new(C.char)分配了一个C

我有以下使用cgo的Go代码:

  func foo() {
       bar := new(C.struct_bar)
       ...
  }

在函数完成其执行后,bar是否会被垃圾收集,或者我需要显式地调用free?

是的,即使
结构\u bar
是C类型,内存也是通过Go分配的,并且将通过Go收集


但是,Go GC不会跟踪在C中分配的任何内存。C代码应该自己管理它,但是在像
C.CString
where Go触发分配的情况下,如果我使用point:=new(C.char)分配了一个C char指针,然后将它作为一个参数传递给一个为该指针分配了一些内存的C函数,那么您必须使用
C.free

来手动释放内存,那么这个内存是由垃圾收集器释放还是不释放?@user24276:
new(C.char)
分配一个字节,稍后由GC收集。如果C函数要分配内存,不要在go中分配任何内容,只需传入一个指针。