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()를 호출하는 가비지 컬렉터에 대한 있는가 : 이런 식으로 뭔가 내가 뭘하려는입니까?
여기에 맞는가요?
아마도 더 직접적인 질문입니다 : 런타임에서 해당 객체에 대한 참조가 없을 때 런타임에서 호출하는 함수를 작성하여 런타임에서 자동으로 C 할당 메모리 정리를 처리하도록 할 수 있습니까?