Есть ли какой-либо анализ эвакуации, выполняемый компилятором CLR/JIT? Например, в Java кажется, что переменная цикла объект, выделенный в цикле, который не выходит из цикла, выделяется в стеке, а не в кучу (см. Анализ Escape в Java).
Чтобы пояснить в приведенном ниже примере, компилятор оптимизирует распределение кучи foo
, поскольку он никогда не ускользает от цикла.
class Foo
{
int number;
Foo(int number) { this.number = number; }
public override string ToString() { return number.ToString(); }
}
for (int i = 0; i < 10000000; i++)
{
Foo foo = new Foo(i);
Console.WriteLine(foo.ToString());
}