[email protected] Mmap()
系統調用中的x/sys/unix
package返回[]byte
類型,而底層的系統調用實際上返回一個指針。它是如何做到的?將指針轉換爲字節片
更具體地說,在由Golang開發人員編寫的this包中,VirtualAlloc
函數只是返回一個指針。如何將它轉換爲字節片,就像在Unix軟件包中一樣?
[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