Des chercheurs danois et suédois en sciences informatiques et systèmes autonomes ont décortiqué la sécurité...
Nvidia se prépare à livrer la plate-forme serveur HGX-2 qui sera capable d'exploiter la puissance de 16 GPU Tesla V100...
L'EMD, une école de commerce située à Marseille ouvre à la prochaine rentrée l'école du numérique...
fixed
empêche le récupérateur de mémoire de déplacer une variable mobile.
L'instruction fixed
est uniquement autorisée dans un contexte unsafe
.
fixed
peut également être utilisé pour créer des mémoires tampons de taille fixe.fixed
définit un pointeur vers une variable managée et épingle cette variable pendant l'exécution de l'instruction.
Les pointeurs vers des variables managées ne sont utiles que dans un contexte fixed
.
Sans contexte fixed
, le garbage collector peut déplacer les variables de manière imprévisible.
Le compilateur C# permet seulement d'assigner un pointeur à une variable managée dans une instruction fixed
.fixed
s'applique à d'autres types au-delà des tableaux, chaînes, mémoires tampons de taille fixe ou variables non managées.
Tout type qui implémente une méthode nommée GetPinnableReference
peut être épinglé.
GetPinnableReference
doit retourner une variable ref
d'un type non géré.System.Span‹T›
et System.ReadOnlySpan‹T›
introduits dans .NET Core 2.0 utilisent ce modèle et peuvent être épinglés.
Ceci est illustré dans l'exemple suivant :Span‹T›.GetPinnableReference()
pour obtenir un exemple d'implémentation du modèle.fixed
, comme indiqué dans l'exemple suivant.fixed
.
La portée des variables déclarées dans l'instruction fixed
est limitée à cette instruction, ce qui facilite les choses :fixed
sont des variables en lecture seule.
Pour modifier la valeur du pointeur, vous devez déclarer une deuxième variable de pointeur et la modifier.
La variable déclarée dans l'instruction fixed
ne peut pas être modifiée :unsafe
, vous pouvez allouer de la mémoire sur la pile, où elle n'est pas soumise au garbage collector et n'a donc pas besoin d'être épinglée.