Awn*_*Awn 2 pointers mmap system-calls virtualalloc go
的Mmap()在系统调用x/sys/unix 包在Golang返回[]byte类型,而底层系统调用实际上返回一个指针。它是如何做到的?
更具体地说,在Golang开发人员的此程序包中,该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))
Run Code Online (Sandbox Code Playgroud)
这是一个操场的例子。
从 Go 1.17 开始,您现在可以使用unsafe.Slice:
mySlice := unsafe.Slice(ptr, numElements)
Run Code Online (Sandbox Code Playgroud)