CLR 编译器/JIT 是否执行了任何转义分析?例如,在 Java 中,循环变量和分配在循环中的对象似乎不会转义循环被分配在堆栈上而不是堆上(请参阅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());
}