Megosztás:


A rögzített kulcsszó

A fixed kulcsszó lehetővé teszi, hogy "rögzítsen" egy helyit a veremen, hogy megakadályozza a szemétgyűjtés során történő gyűjtését vagy áthelyezését. Alacsony szintű programozási forgatókönyvekhez használják.

Szemantika

use ptr = fixed expression

Megjegyzések

Ez kiterjeszti a kifejezések szintaxisát, hogy lehetővé tegye a mutató kinyerését és egy olyan névhez kötését, amely nem gyűjthető vagy helyezhető át a szemétgyűjtés során.

Egy kifejezés mutatója a fixed kulcsszón keresztül van rögzítve, és a kulcsszón keresztül use egy azonosítóhoz van kötve. Ennek szemantikája hasonló a kulcsszón keresztüli use erőforrás-kezeléshez. A mutató rögzített, amíg a hatókörben van, és ha már nincs hatókörben, már nem lesz javítva. fixed nem használható a kötés környezetén use kívül. Az egérmutatót egy névhez kell kötnie use.

fixed A használatnak egy függvényben vagy metódusban lévő kifejezésen belül kell történnie. Szkriptszintű vagy modulszintű hatókörben nem használható.

Mint minden mutatókód, ez is egy nem biztonságos funkció, és figyelmeztetést ad ki használat esetén.

példa

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

Lásd még