2010-06-10 36 views
2

這可能是一個騙局。我沒有找到足夠的信息。.NET中集合的內存分配

我在討論.NET中集合的內存分配問題。 集合中分配的元素的內存在哪裏?

List<int> myList = new List<int>(); 

變量myList在棧上分配,它引用在堆上創建的List對象。

問題是什麼時候將int元素添加到myList中,他們將在哪裏創建?

任何人都可以指出正確的方向嗎?

+0

我很好奇。你的問題是關於.NET中的內存分配問題,但你的標題問到C#。這是爲什麼? – 2010-06-10 20:10:55

+0

我的意思是在.Net中的內存分配。我很習慣C#,它在我的討論中無意中出現。 :) – AlwaysAProgrammer 2010-06-10 20:15:58

回答

2

元素也將駐留在堆中(在數組中,這就是List如何在內部工作)。

原則上,只有局部變量和參數在棧上分配和一切都會在堆(除非你使用稀有的東西,如stackalloc,但你不必擔心)

+0

如果值類型也駐留在堆上,會出現裝箱問題嗎? – AlwaysAProgrammer 2010-06-10 20:10:26

+0

@Yogendra:是的,一個簡單的值類型(認爲數字)在將它放在堆上之前確實需要是框。原始數組是一個例外,它包含值類型但仍駐留在堆上。原始數組中的元素不是裝箱的。 – 2010-06-10 20:12:36

+3

不,列表不包含。 ArrayList的確如此。 – 2010-06-10 20:12:42

8

元素將在堆上創建。生活在堆棧上的唯一東西是指向列表的指針(引用)(List<>是引用類型)