问题:
给定指向数组的不安全指针,我们如何在不产生内存成本的情况下创建数组或切片复制?
答案:
使用 Reflect 创建切片:
推荐的方法是使用 Reflect 包创建一个切片头,该头指向与不安全的相同的基础数据指针。
// Create a slice header sh := &reflect.SliceHeader{ Data: p, // Unsafe pointer to the array Len: size, Cap: size, } // Use the slice header to create a slice data := *(*[]byte)(unsafe.Pointer(sh))
使用 Reflect 创建数组:
要从不安全的指针创建数组(指向连续内存中的元素的指针),我们可以首先创建切片,然后获取其地址:
// Create a slice data := *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ Data: p, Len: size, Cap: size, })) // Get the address of the slice (pointer to the first element) arr := (*[size]byte)(unsafe.Pointer(&data[0]))
注意事项和警告:
以上是如何从'unsafe.Pointer”安全地创建 Go 切片或数组?的详细内容。更多信息请关注PHP中文网其他相关文章!