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