【发布时间】:2021-07-09 18:17:54
【问题描述】:
因此,假设我绝对需要在 go 中将值存储在 0xc0000140f0 的特定内存地址。我该怎么做。例如:
package main
import (
"fmt"
"unsafe"
)
func main() {
targetAddress := 0xc0000140f0
loc := (uintptr)(unsafe.Pointer(targetAddress))
p := unsafe.Pointer(loc)
var val int = *((*int)(p))
fmt.Println("Location : ", loc, " Val :", val)
}
这会导致以下错误:
./memory.go:10:33: cannot convert targetAddress (type int) to type unsafe.Pointer
【问题讨论】:
-
如果有人使用
var targetAddress uintptr = 0xc0000140f0,这个“有效”,但我对 Go 的了解还不够,不能说这是一个很好的解决方案。 -
该错误显示您在哪里使用 int,它不是转换为
unsafe.Pointer的类型。使用uintptr(尽管这会导致未定义的行为,并且会因“可能滥用 unsafe.Pointer”而失败go vet) -
jakub - 你的评论成功了。
标签: go memory memory-management