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 (将#修改为@)