我正在尝试使用launchpad.net/gommap
对内存映射int32
数组以及其他一些自定义结构类型。我非常希望在映射区域中使用它们。 gommap.Mmap
类型为[]byte
,如何将其中某些部分作为其他类型的切片提供?
答案 0 :(得分:1)
您必须使用不安全的软件包。
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
不安全地重新投放到gommap.MMap
来实现这一目标。