10
是否有可能在Go處理中創建垃圾收集器並釋放通過C代碼分配的內存?我很抱歉,我之前沒有使用C和cgo,所以我的示例可能需要一些說明。垃圾回收和cgo
假設你已經有了一些你想使用的C庫,並且這個庫分配了一些需要手動釋放的內存。我想要做的是這樣的:
package stuff
/*
#include <stuff.h>
*/
import "C"
type Stuff C.Stuff
func NewStuff() *Stuff {
stuff := Stuff(C.NewStuff()) // Allocate memory
// define the release function for the runtime to call
// when this object has no references to it (to release memory)
// In this case it's stuff.Free()
return stuff
}
func (s Stuff) Free() {
C.Free(C.Stuff(s)) // Release memory
}
有沒有什麼辦法讓垃圾回收器調用Stuff.Free()的時候沒有引用*的東西,在Go運行時?
我在這裏有意義嗎?
也許一個更直接的問題是:是否可以通過編寫一個函數來使運行時自動處理清理C分配的內存,該函數在對該對象有零引用時運行時調用?