github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/runtime/pinner.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package runtime 6 7 // Pinnerは、メモリ内の固定された場所に各Goオブジェクトが固定されたセットです。 8 // [Pinner.Pin]メソッドは1つのオブジェクトを固定し、[Pinner.Unpin]メソッドはすべての固定されたオブジェクトを解除します。 9 // 詳細については、それぞれのコメントを参照してください。 10 type Pinner struct { 11 *pinner 12 } 13 14 // PinはGoオブジェクトをピン留めし、[Pinner.Unpin] メソッドが呼び出されるまで、 15 // ガベージコレクタによって移動または解放されるのを防ぎます。 16 // 17 // 固定されたオブジェクトへのポインタは、Cメモリに直接格納されるか、C関数に渡されるGoメモリに含まれることができます。 18 // 固定されたオブジェクト自体がGoオブジェクトへのポインタを含む場合、これらのオブジェクトがCコードからアクセスされる場合は、別途固定する必要があります。 19 // 20 // 引数は、任意の型のポインタまたは [unsafe.Pointer] である必要があります。 21 // 非Goポインタに対してPinを呼び出すことは安全であり、その場合、Pinは何もしません。 22 func (p *Pinner) Pin(pointer any) 23 24 // Unpinは [Pinner] のすべてのピン留めされたオブジェクトを解除します。 25 func (p *Pinner) Unpin()