我正在尝试使用launchpad.net/gommap内存映射数组int32和其他一些自定义结构类型。我严格想在它们位于映射区域的地方使用它们。该gommap.Mmap类型是[]byte,我怎样才能使这部分可作为一些其他类型的片?
1 回答
湖上湖
TA贡献2003条经验 获得超2个赞
你必须使用 unsafe 包。
func mapInt32(fd uintptr, prot gommap.ProtFlags, flags gommap.MapFlags) ([]int32, error) {
mmap, err := gommap.Map(fd, prot, flags)
if err != nil {
return nil, err
}
header := (*reflect.SliceHeader)(unsafe.Pointer(&mmap))
// account for the size different between byte and int32
header.Len /= 4
header.Cap = header.Len
return *(*[]int32)(unsafe.Pointer(header)), nil
}
完成后,您可能希望设法取消内存映射。你可以通过以类似的方式不安全地将你的[]int32背投向 a来做到这gommap.MMap一点。
- 1 回答
- 0 关注
- 180 浏览
添加回答
举报
0/150
提交
取消