将指针转换为字节片

Awn*_*Awn 2 pointers mmap system-calls virtualalloc go

Mmap()在系统调用x/sys/unix 在Golang返回[]byte类型,而底层系统调用实际上返回一个指针。它是如何做到的?

更具体地说,在Golang开发人员的程序包中,该VirtualAlloc函数仅返回一个指针。如何将其转换为字节片,就像在Unix软件包中一样?

mko*_*iva 5

使用该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)

这是一个操场的例子


Rod*_*igo 5

从 Go 1.17 开始,您现在可以使用unsafe.Slice

mySlice := unsafe.Slice(ptr, numElements)
Run Code Online (Sandbox Code Playgroud)