2011-07-22 22 views
2

可能重複:
(C#) Arrays, heap and stack and value typesC#中的ValueType數組轉到堆或堆棧?

我想學習C#中的內存分配之間存在一些差異

讓我們假設我有這樣的指令:

int[] array = new int[512]; 

「數組」是否轉到堆?或者它保留堆棧上的512個整數?

+0

@BoltClock:是的,看起來像它。接得好。 –

+1

此外,http://blogs.msdn.com/b/ericlippert/archive/2009/05/04/the-stack-is-an-implementation-detail-part-two.aspx應該是每個人都需要的講座關於內存管理語言中的堆/堆棧。 – delnan

回答

10

該數組本身是分配在堆上的內存。人們會感到困惑,認爲價值類型總是在堆棧中,這並不總是正確的。

例如,在這個類:

public class X 
{ 
    public int Y; 
} 

即使Y是一個int(值類型),因爲它被包含在一個類(引用類型),則INTÿ將被存儲在與對象本身,這很可能在堆上。

該數組是類似的。整數作爲值類型包含在數組中,但數組本身在堆中,因此整數也是。

-7

這並不重要,因爲你不能直接訪問cpu堆棧和cpu堆,所以你無法控制它。如果你無法控制它,你不需要擔心。

可以在StackOverflowException或MemoryAllocationError的情況下做一些關於它在這種情況下恢復關鍵數據