#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;
}
}