Sdílet prostřednictvím


Pevné klíčové slovo

Klíčové fixed slovo umožňuje "připnout" místní do zásobníku, aby se zabránilo jeho shromažďování nebo přesouvání během uvolňování paměti. Používá se pro scénáře programování nízké úrovně.

Syntaxe

use ptr = fixed expression

Poznámky

Tím se rozšíří syntaxe výrazů, aby bylo možné extrahovat ukazatel a vytvořit vazbu na název, který brání shromažďování nebo přesouvání během uvolňování paměti.

Ukazatel z výrazu je pevný prostřednictvím klíčového fixed slova a je vázán na identifikátor prostřednictvím klíčového use slova. Sémantika je podobná sémantice správy prostředků prostřednictvím klíčového use slova. Ukazatel je pevný, když je v oboru a jakmile je mimo rozsah, už není opravený. fixed nelze použít mimo kontext vazby use . Ukazatel musíte svázat s názvem .use

fixed Použití musí nastat ve výrazu ve funkci nebo metodě. Nelze ho použít na úrovni skriptu nebo oboru na úrovni modulu.

Stejně jako u všech kódů ukazatelů je to nebezpečná funkce a při použití se vygeneruje upozornění.

Příklad

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

Viz také