我正在尝试使用launchpad.net/gommap
内存映射数组int32
和其他一些自定义结构类型。我严格希望在映射区域中的位置使用它们。gommap.Mmap
类型是[]byte
,如何将其中的部分作为其他类型的切片提供?
问问题
525 次
1 回答
1
你必须使用 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
背靠背来做到这一点。gommap.MMap
于 2013-08-06T05:36:21.117 回答