【问题标题】:Garbage collection in cgocgo 中的垃圾回收
【发布时间】:2016-03-31 21:26:32
【问题描述】:

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

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

函数完成执行后是否会对 bar 进行垃圾回收,或者我需要显式调用 free?

【问题讨论】:

    标签: memory-management go cgo


    【解决方案1】:

    是的,虽然struct_bar是C类型,但内存是Go分配的,Go会回收的。

    然而,在 C 中分配的任何内存都不会被 Go GC 跟踪。 C 代码应该自己管理它,但在像 C.CString 这样 Go 触发分配的情况下,您必须使用 C.free 手动释放内存。

    【讨论】:

    • 后续,如果我使用 point := new(C.char) 分配了一个 C char 指针,然后将其作为参数传递给为该指针分配一些内存的 C 函数,那么垃圾收集器是否会释放此内存?
    • @user2424276: new(C.char) 分配一个字节,稍后将由 GC 收集。如果 C 函数要分配内存,不要在 go 中分配任何东西,只需传入一个指针即可。
    猜你喜欢
    • 2012-03-21
    • 2013-05-02
    • 1970-01-01
    • 2011-12-21
    • 2012-01-28
    • 2013-06-27
    • 2011-11-29
    • 2021-12-20
    • 2011-07-15
    相关资源
    最近更新 更多