¿Es posible hacer el recolector de basura en el controlador Go y liberar la memoria asignada mediante el código C? Me disculpo, no he usado C y cgo antes, así que mis ejemplos pueden necesitar alguna aclaración.Recogida de basura y cgo
Digamos que tiene alguna biblioteca C que le gustaría usar y esta biblioteca asigna parte de la memoria que debe liberarse manualmente. Lo que me gustaría hacer es algo como esto:
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
}
¿Hay alguna manera para que el recolector de basura para llamar Stuff.Free() cuando no hay referencias a * cosas en el tiempo de ejecución Go?
¿Tengo sentido aquí?
Quizás una pregunta más directa es: ¿es posible hacer que el tiempo de ejecución maneje automáticamente la limpieza de la memoria asignada C escribiendo una función que llama el tiempo de ejecución cuando no hay referencias a ese objeto?