fixed キーワード
fixed
キーワードを使用すると、ローカルをスタックに "固定" して、ガベージ コレクション中に収集または移動できないようにすることができます。 これは、低レベルのプログラミング シナリオに使用されます。
構文
use ptr = fixed expression
解説
これにより、式の構文が拡張され、ポインターを抽出して、ガベージ コレクション中に収集または移動できない名前にバインドできるようになります。
式からのポインターは、fixed
キーワードを使用して固定され、use
キーワードを使用して識別子にバインドされます。 このセマンティクスは、use
キーワードを使用したリソース管理に似ています。 ポインターは、スコープ内にある間は固定され、スコープ外になると固定されなくなります。 fixed
は、use
バインドのコンテキストの外部では使用できません。 use
を使用してポインターを名前にバインドする必要があります。
fixed
は、関数またはメソッドの式の中で使用する必要があります。 スクリプト レベルまたはモジュール レベルのスコープでは使用できません。
すべてのポインター コードと同様に、これは安全でない機能であり、使用すると警告が出力されます。
例
open Microsoft.FSharp.NativeInterop
type Point = { mutable X: int; mutable Y: int}
let squareWithPointer (p: nativeptr<int>) =
// Dereference the pointer at the 0th address.
let mutable value = NativePtr.get p 0
// Perform some work
value <- value * value
// Set the value in the pointer at the 0th address.
NativePtr.set p 0 value
let pnt = { X = 1; Y = 2 }
printfn $"pnt before - X: %d{pnt.X} Y: %d{pnt.Y}" // prints 1 and 2
// Note that the use of 'fixed' is inside a function.
// You cannot fix a pointer at a script-level or module-level scope.
let doPointerWork() =
use ptr = fixed &pnt.Y
// Square the Y value
squareWithPointer ptr
printfn $"pnt after - X: %d{pnt.X} Y: %d{pnt.Y}" // prints 1 and 4
doPointerWork()
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET