Небезопасен сбор мусора C #

#c# #memory-leaks #garbage-collection

#c# #утечки памяти #сбор мусора

Вопрос:

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

 unsafe
{
    while(true) new int; 
}
  

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

Спасибо

Комментарии:

1. Мне нравится, как каждое ключевое слово в этом фрагменте кода выделено синим.

2. Это не будет компилироваться; в нем отсутствуют круглые скобки. Кроме того, int это плохой пример, потому что это тип значения.

3. 1 Это кажется разумным вопросом. Почему голоса против?

Ответ №1:

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

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

Ответ №2:

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

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

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

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