Небезопасно сборка мусора в C # - PullRequest
4 голосов
/ 11 ноября 2011

Я читал об утечках памяти в управляемом коде и задавался вопросом, возможно ли создать это в небезопасном коде на C #?

unsafe
{
    while(true) new int; 
}

Я не был уверен, поймет ли это GC, если он работает как небезопасный код?

Спасибо

Ответы [ 2 ]

10 голосов
/ 11 ноября 2011

Ключевое слово unsafe позволяет вам использовать небезопасный код (указатели).

Оно не меняет семантику обычного кода вообще.

7 голосов
/ 14 декабря 2012

IMO небезопасно только разрешает использовать типы указателей и работать с памятью в стиле C ++.Но чтобы сборщик мусора не трогал мой код, используйте оператор fixed .

C # поддерживает прямое манипулирование памятью с помощью указателей внутри блоков кода, помеченных как небезопасные и компилируемых с параметром компилятора / unsafe.

Оператор fixed используется для указания сборщику мусора не касаться того кода, который был округлен до fixed , оператор

   unsafe
    {
       fixed (int* a = &b)   // tells garbage collector not touch 
       {
         *a = 9;
       }    
    }
...