0

我正在尝试使用launchpad.net/gommap内存映射数组int32和其他一些自定义结构类型。我严格希望在映射区域中的位置使用它们。gommap.Mmap类型是[]byte,如何将其中的部分作为其他类型的切片提供?

4

1 回答 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 回答