問題:
給定指向數組的不安全指針,我們如何在不產生內存成本的情況下創建數組或切片複製?
答案:
使用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中文網其他相關文章!