微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CGO:如何释放由 C 数组支持的 go 切片

如何解决CGO:如何释放由 C 数组支持的 go 切片

CGO 维基:https://github.com/golang/go/wiki/cgo#turning-c-arrays-into-go-slices 这解释了如何将 c 数组转换为 go slices(不复制原始数据),并且还做了一个声明: “重要的是要记住,Go 垃圾收集器不会与这些数据交互,如果它从 C 方面释放出来,任何使用切片的 Go 代码的行为都是不确定的。"

但我的疑问是,在我们使用完这个切片之后,我们如何释放为该切片分配的内存?可以通过对 C 世界的适当调用来释放支持 C 数组,但是切片呢?会被垃圾回收吗?

还有,

slice := (*[1 << 28]C.YourType)(unsafe.Pointer(theCArray))[:length:length]

这个语句会分配一个相当大的数组然后切片吗?我的意思是,它会导致大内存分配吗?如果是这样,那么大内存将如何以及何时被释放? 理解切片将“由 C 数组支持”也令人困惑。 如果切片由 C 数组支持,那么为什么需要一个大数组 [1<<28]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。