Çöp toplayıcısını Git tutamacında tutabilmek ve C koduyla ayrılan belleği serbest bırakmak mümkün mü? Özür dilerim, C ve cgo'yu daha önce kullanmadım, bu yüzden örneklerin bazı açıklamalara ihtiyacı olabilir.Çöp toplama ve saklama kutusu
Kullanmak istediğiniz bazı C kitaplığınızın olduğunu ve bu kitaplığın el ile serbest bırakılması gereken bir bellek ayırdığını varsayalım.
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
}
herhangi bir şekilde Git zamanında hiçbir referanslar için * Stuff olduğunda Stuff.Free() çağırmak için çöp toplayıcısı için var mı: Böyle bir şey Ne yapmak istiyorum nedir?
Burada anlamlı mıyım?
Belki de daha doğrudan bir soru şudur: Çalışma zamanının, söz konusu nesneye sıfır referans olduğunda çalışma zamanının çalacağı bir işlev yazarak C ayrılmış belleğin temizlenmesini otomatik olarak gerçekleştirmesi mümkün müdür?