共用方式為


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

另請參閱