6 votes

Le code C# est-il collecté par le ramasse-miettes ?

Je lisais à propos des fuites de mémoire dans du code géré et je me demandais s'il était possible de créer cela en utilisant du code non sécurisé en C# ?

unsafe
{
    while(true) new int; 
}

Je n'étais pas sûr si cela serait détecté par le GC si cela s'exécutait en tant que code non sécurisé ?

Merci

11voto

SLaks Points 391154

Le mot-clé unsafe vous permet simplement d'utiliser du code non sécurisé (pointeurs).

Cela ne change pas du tout la sémantique du code ordinaire.

8voto

lukaszk Points 151

IMO unsafe permet seulement d'utiliser des types de pointeur et des opérations de pointeur de style C++ sur la mémoire. Mais pour indiquer au collecteur de déchets de ne pas toucher à mon code, utilisez l'instruction fixed.

C# prend en charge la manipulation directe de la mémoire via des pointeurs à l'intérieur de blocs de code marqués unsafe et compilés avec l'option /unsafe du compilateur.

L'instruction fixed est utilisée pour indiquer au collecteur de déchets de ne pas toucher au code qui a été entouré de l'instruction fixed

   unsafe
    {
       fixed (int* a = &b)   // indique au collecteur de déchets de ne pas toucher 
       {
         *a = 9;
       }    
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X