0
我試圖用launchpad.net/gommap
來映射一個int32
和其他一些自定義結構類型的數組。我嚴格地希望在映射區域中使用它們。 gommap.Mmap
類型是[]byte
,我怎樣才能使這些部分可用作其他類型的切片?如何在Go中映射一片X?
我試圖用launchpad.net/gommap
來映射一個int32
和其他一些自定義結構類型的數組。我嚴格地希望在映射區域中使用它們。 gommap.Mmap
類型是[]byte
,我怎樣才能使這些部分可用作其他類型的切片?如何在Go中映射一片X?
你必須使用不安全的軟件包。
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
來做到這一點。
儘管'gommap.Map'返回時它們已經相等,您已經創建了'header.Cap = header.Len'。你是否這樣做以避免再次以4分割? –
你也可以分割'header.Cap'。這種或那種方式應該等於'header.Len'。 –
謝謝!這是我需要的澄清。我會嘗試這個答案,並將其標記爲解決方案。 –