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()
另請參閱
- NativePtr 模組 (英文)