runtime.Pinner[1] 是 Go 1.21.0 中引入的一个类型。
Pinner
是一组固定的 Go 对象。可以使用 Pin
方法来固定一个对象。Pinner
固定的所有对象都可以使用 Unpin
方法解开固定。
Pinner.Pin
是 Go 语言中用于防止对象被垃圾回收器回收的函数。它接受一个指针参数,并将该指针指向的内存区域标记为不可移动。这意味着,即使该对象不再被任何变量引用,它也不会被回收,直到调用 Pinner.Unpin
函数将其取消固定。
Pinner.Pin
通常用于以下场景:
以下示例演示了如何使用 Pinner.Pin
函数:
package main
import (
"fmt"
"runtime"
)
func main() {
// 创建一个新的 `[]byte` 数组
data := make([]byte, 10)
// 将数组固定
p := runtime.Pinner.Pin(data)
// 对数组进行一些操作
for i := range data {
data[i] = byte(i)
}
// 取消固定数组
p.Unpin()
// 打印数组内容
fmt.Println(data)
}
Pinner.Pin
函数:new
函数创建的对象局部变量的地址
Pinner.Pin
函数,会导致程序崩溃。Pinner.Unpin
函数之前,必须确保不再使用该对象,否则会导致程序运行时错误参考资料[1] runtime.Pinner: https://pkg.go.dev/runtime#Pinner
Copyright© 2013-2019