2016-03-31 78 views
1

我在轉到下面的代碼,它使用CGO:垃圾收集在CGO

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

將禁止被垃圾收集功能完成其執行或我需要顯式調用免費後?

回答

4

是的,即使struct_bar是C類型,內存由Go分配,並將由Go收集。

但是,在GC中分配的任何內存都不會被跟蹤。 C代碼應該自行管理它,但在類似C.CString的情況下,Go會觸發分配,您必須用C.free手動釋放內存。

+0

如果我使用point:= new(C.char)分配了一個C char指針,然後將其作爲參數傳遞給爲此指針分配了一些內存的C函數,那麼這個內存是否會被釋放由垃圾收集器還是沒有? – user2424276

+2

@ user2424276:'new(C.char)'分配一個字節,稍後將由GC收集。如果C函數要分配內存,則不要分配任何內容,只需傳入一個指針即可。 – JimB