对于Go语言中的非结构切片
a := []byte{0,1,2,3,4,5,6,7}
并通过unsafe.Pointer()
传递到C
C.some_method((*C.char)(unsafe.Pointer(&a[0])), C.int(len(a)))
在指针中写入任何内容是否安全,但要注意指针的长度?
void some_method(char* a, int a_len) {
for (int i=0; i<a_len; i++) {
a[i] = i+1;
}
}
1条答案
按热度按时间3htmauhk1#
经过一点研究和阅读评论,我认为这里有几件事需要注意:
runtime.KeepAlive()
完成unsafe.Pointer
这样做,它将不会获得更新(https://pkg.go.dev/unsafe#Pointer)。但是很快就会有一个pin机制(https://github.com/golang/go/issues/46787)。//go:uintptrescapes
不太可能用于CGO,请谨慎使用。