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