2011-10-05 32 views
0

可能重複:
Why value-types are stored onto Stacks?爲什麼.NET將簡單類型(int,..)保存在堆棧中?

我瞭解裝箱/拆箱,但我的問題是,爲什麼.NET使店即的選擇。堆棧中的整數?

它是合乎邏輯的,當你(簡單)在proc/functions之間傳遞參數時......但是......爲什麼......這一般是在.NET中被一般使用的?

非常感謝!

+0

這並非完全正確。閱讀[this](http://stackoverflow.com/questions/815354/why-are-structs-stored-on-the-stack-while-classes-get-stored-on-the-heap-net/815420#815420 )和[this](http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx)。 – Oded

+0

爲什麼.NET選擇不使用堆棧作爲短期變量(如果可用)? –

+3

這個問題是基於一個完全錯誤的前提。 .NET團隊沒有做出這個決定,所以問他們爲什麼這麼做毫無意義。整數並不總是存儲在堆棧中。有時它們存儲在堆棧中,有時它們存儲在寄存器中,有時它們存儲在堆中,具體取決於存儲器的生命週期。 –

回答

0

並非所有的整數都在堆棧中。只有函數本地或在函數之間傳遞的整數才被存儲在堆棧中。

如果整數是其中REF類型存儲類(ref類型),則整數被存儲在位置的一部分(託管堆)

0

因爲對於每個整數分配堆對象和所有解引用指針時間將會是數量級太慢。