Здравствуйте, Mystic Artifact, Вы писали:
MA> Всё правильно. При этом GC умеет сопостовлять IP (instruction pointer, полагаю offset внутри метода) с тем, что считать живым на стэке. Поэтому зануливаний ему и не нужно.
Это элементарно проверить.
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Foo();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Console.WriteLine("End Main");
}
class A
{
~A()
{
Console.WriteLine("~A");
}
}
static void Foo()
{
{
var a = new A();
//a = null; // Здесь раскоментировать для получения другого результата
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Console.WriteLine("End Foo");
}
}
}
Никто ничего не сопоставляет. Я бы сильно удивился если бы это было так.