runtime.Pinner 是 Go 1.21.0 中引入的一个类型。
Pinner
是一组固定的 Go 对象。可以使用 Pin
方法来固定一个对象。Pinner
固定的所有对象都可以使用 Unpin
方法解开固定。
简介
Pinner.Pin
是 Go 语言中用于防止对象被垃圾回收器回收的函数。它接受一个指针参数,并将该指针指向的内存区域标记为不可移动。这意味着,即使该对象不再被任何变量引用,它也不会被回收,直到调用 Pinner.Unpin
函数将其取消固定。
使用场景
Pinner.Pin
通常用于以下场景:
- 在与 C 代码互操作时,需要将 Go 对象传递给 C 函数。
- 在需要确保对象在某个时间段内保持有效的场景中,例如,在进行 I/O 操作或计算密集型操作时。
示例
以下示例演示了如何使用 Pinner.Pin
函数:
|
|
注意事项
- 只能对以下类型的对象调用
Pinner.Pin
函数:- 通过
new
函数创建的对象 - 复合字面量的地址
- 局部变量的地址
- 通过
- 如果对非法的对象调用
Pinner.Pin
函数,会导致程序崩溃。 - 在调用
Pinner.Unpin
函数之前,必须确保不再使用该对象,否则会导致程序运行时错误