0

launchpad.net/gommapの配列int32、およびその他のカスタム構造体型をメモリ マップするために使用しようとしています。マップされた領域にある場所でそれらを使用したいだけです。gommap.Mmapタイプは です。その[]byteセクションを他のタイプのスライスとして使用できるようにするにはどうすればよいですか?

4

1 に答える 1

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

于 2013-08-06T05:36:21.117 に答える