질문:
제공됨 배열에 대한 안전하지 않은 포인터, 메모리 비용을 발생시키지 않고 어떻게 배열이나 슬라이스를 만들 수 있습니까? 복사하시겠습니까?
답변:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!