Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kata fixed kunci memungkinkan Anda untuk "menyematkan" lokal ke tumpukan untuk mencegahnya dikumpulkan atau dipindahkan selama pengumpulan sampah. Ini digunakan untuk skenario pemrograman tingkat rendah.
Sintaksis
use ptr = fixed expression
Komentar
Ini memperluas sintaks ekspresi untuk memungkinkan mengekstrak pointer dan mengikatnya ke nama yang dicegah dikumpulkan atau dipindahkan selama pengumpulan sampah.
Penunjuk dari ekspresi diperbaiki melalui fixed kata kunci dan terikat ke pengidentifikasi melalui use kata kunci. Semantik ini mirip dengan manajemen sumber daya melalui use kata kunci. Penunjuk diperbaiki saat berada dalam cakupan, dan setelah berada di luar cakupan, penunjuk tidak lagi diperbaiki.
fixed tidak dapat digunakan di luar konteks use pengikatan. Anda harus mengikat penunjuk ke nama dengan use.
Penggunaan fixed harus terjadi dalam ekspresi dalam fungsi atau metode. Ini tidak dapat digunakan pada cakupan tingkat skrip atau tingkat modul.
Seperti semua kode pointer, ini adalah fitur yang tidak aman dan akan memancarkan peringatan saat digunakan.
Contoh
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()