go - CGO:如何释放由 C 数组支持的 go slice
问题描述
CGO Wiki:https ://github.com/golang/go/wiki/cgo#turning-c-arrays-into-go-slices 这解释了如何将 c 数组转换为 go 切片(不复制原始数据)和它还做了一个声明:“重要的是要记住,Go 垃圾收集器不会与这些数据交互,并且如果它从 C 方面释放出来,任何使用切片的 Go 代码的行为都是不确定的。 "
但我的疑问是,在我们使用完这个切片之后,我们如何释放为切片分配的内存?支持 C 数组可以通过适当调用 C 世界来释放,但是切片呢?它会被垃圾收集吗?
还,
slice := (*[1 << 28]C.YourType)(unsafe.Pointer(theCArray))[:length:length]
这个语句会分配一个相当大的数组然后切片吗?我的意思是,它会导致大的内存分配吗?如果是这样,那么大内存将如何以及何时被释放?理解切片将“由 C 数组支持”也令人困惑。如果切片由 C 数组支持,那么为什么[1<<28]
需要 BIG 数组?
解决方案
推荐阅读
- android - MvvmCross EnsureSingletonAvailable 和 EnsureInitialized
- mongodb - 数据库 | 聚合后如何更新(findandmodify)
- bash - shell 脚本中的 VERBOSE 环境
- javascript - 在 Vue.js 中从 API 获取 HTML
- ruby-on-rails - Rails 冲突 ajax 和 URI.encode
- windows - 来自 Windows 的 SSH 连接在一分钟内中止
- amazon-web-services - 将弹性文件系统挂载到 AWS Batch 计算机环境
- renderdoc - 如何为要显示的“部分”设置名称?
- javascript - Bootstrap 导航栏在 AngularJS 环境中没有折叠
- javascript - 有没有办法检测具有特定类的 div 并将顶部滚动条移动到它在父 div 内的位置?