CLR編譯器/ JIT執行任何轉義分析嗎?例如,在Java中,似乎
循環變量
在循環中分配的對象不會轉移循環,而是分配到堆棧而不是堆(請參閱Escape analysis in Java)。.NET CLR虛擬機中的轉義分析
爲了闡明,在下面的例子中,編譯器會優化掉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());
}
典型地,語義,循環變量是值類型,其被在所分配的堆棧(在循環的情況下)。 –
我的意思是在循環體內分配一個變量。我會更新這個問題來澄清。 – SimonC
你的意思是*變量*?或*對象*? (概念上非常不同) –