将指针转换为字节片
问题描述:
[email protected] Mmap()
系统调用中的x/sys/unix
package返回[]byte
类型,而底层的系统调用实际上返回一个指针。它是如何做到的?将指针转换为字节片
更具体地说,在由Golang开发人员编写的this包中,VirtualAlloc
函数只是返回一个指针。如何将它转换为字节片,就像在Unix软件包中一样?
答
使用unsafe
包,你可以做同样的事情golang.org/x/sys/unix
确实在Mmap方法其未导出mmapper
类型:
// Slice memory layout
var sl = struct {
addr uintptr
len int
cap int
}{addr, length, length}
// Use unsafe to turn sl into a []byte.
b := *(*[]byte)(unsafe.Pointer(&sl))
尝试此https://github.com/golang/sys/blob/d75a52659825e75fff6158388dddc6a5b04f9ba5/unix/syscall_unix.go#L72-L80([游乐场示例](https://play.golang.org/p/An7jG5xl2W) ) – mkopriva
@mkopriva哇,不敢相信我错过了。你可以把它作为答案吗? – Awn
该评论现在发布为答案。 – mkopriva