如何在Go中映射一片X?

时间:2013-08-06 02:55:43

标签: go mmap

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

1 个答案:

答案 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来实现这一目标。