假设我在Go语言中创建了一个字符串,并通过cgo将其地址传递给C程序。我怎么能让Go语言的垃圾收集永远忽略这个字符串,就像Golang永远不会新建这个字符串一样,让C决定何时释放内存?我只能将Go对象指针传递给C++。但是我不能阻止Go垃圾回收来回收对象。
dauxcl2d1#
如果忽略意味着释放这个字符串分配的内存:简单的答案是:永远不要在你的go代码中使用它,不要提供GC。在Go语言中使用C代码时,重要的是要记住,Go语言和C语言都维护自己独立的内存管理系统。GOLANG GC将为该字符串释放内存。但是当你把它传递给C时,它也会为字符串分配内存,只有当你显式使用defer C.free(someString)时才释放它。
defer C.free(someString)
1条答案
按热度按时间dauxcl2d1#
如果忽略意味着释放这个字符串分配的内存:简单的答案是:永远不要在你的go代码中使用它,不要提供GC。
在Go语言中使用C代码时,重要的是要记住,Go语言和C语言都维护自己独立的内存管理系统。
GOLANG GC将为该字符串释放内存。但是当你把它传递给C时,它也会为字符串分配内存,只有当你显式使用
defer C.free(someString)
时才释放它。