Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A fixed palavra-chave permite que você "fixe" um local na pilha para impedir que ele seja coletado ou movido durante a coleta de lixo. Ele é usado para cenários de programação de baixo nível.
Sintaxe
use ptr = fixed expression
Observações
Isso estende a sintaxe das expressões para permitir a extração de um ponteiro e vinculá-lo a um nome que é impedido de ser coletado ou movido durante a coleta de lixo.
Um ponteiro de uma expressão é corrigido por meio da fixed palavra-chave e é associado a um identificador por meio da use palavra-chave. A semântica disso é semelhante ao gerenciamento de recursos por meio da use palavra-chave. O ponteiro é corrigido enquanto está no escopo e, uma vez fora do escopo, ele não é mais corrigido.
fixed não pode ser usado fora do contexto de uma use associação. Você deve associar o ponteiro a um nome com use.
O uso deve ocorrer dentro de fixed uma expressão em uma função ou um método. Ele não pode ser usado em um escopo de nível de script ou de módulo.
Como todo código de ponteiro, esse é um recurso não seguro e emitirá um aviso quando usado.
Exemplo
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()