Go语言中的Pinner.Pin

660次阅读  |  发布于10月以前

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)
}

注意事项

参考资料

参考资料[1] runtime.Pinner: https://pkg.go.dev/runtime#Pinner

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8