0
int32
배열과 다른 사용자 지정 구조체 배열을 메모리 맵에 매핑하려면 launchpad.net/gommap
을 사용하려고합니다. 나는 그들이 맵핑 된 영역에있는 곳을 엄격하게 사용하고 싶다. gommap.Mmap
유형은 []byte
입니다. 어떻게 다른 유형의 슬라이스로 사용할 수있는 섹션을 만들 수 있습니까?Go에서 X 조각을 mmap하는 방법?
int32
배열과 다른 사용자 지정 구조체 배열을 메모리 맵에 매핑하려면 launchpad.net/gommap
을 사용하려고합니다. 나는 그들이 맵핑 된 영역에있는 곳을 엄격하게 사용하고 싶다. gommap.Mmap
유형은 []byte
입니다. 어떻게 다른 유형의 슬라이스로 사용할 수있는 섹션을 만들 수 있습니까?Go에서 X 조각을 mmap하는 방법?
안전하지 않은 패키지를 사용해야합니다.
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'과 같아야합니다. –
고마워요! 그것이 내가 필요한 설명이다. 나는이 대답을 시도하고 그것이 작동하는 경우 솔루션을 표시합니다. –