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