2010-10-29 31 views

回答

3

它不應該是正確回答你的兩個問題。

但是,爲了招待你,Nullable<T>不是集合元素的實例不是引用類型的字段,也不是迭代器塊中的本地元素,或者是lambda或匿名方法可能存儲在堆棧中。

但是,它不應該的問題。這是一個實現細節(這意味着它可能是Microsoft實現CLR的一種方式,但它不一定是,而且它可能是Mono實現CLR的另一種方式)。

+0

你是對的。不是太重要,只是想明白到底發生了什麼。如果可空佔用2內存幀和int佔用1然後我會假設1更有效率,我錯了嗎? – 2010-10-29 04:12:26

+0

如果你正在考慮使用Nullable 那麼我猜你可能會在意這個int的無效性,所以如果你不想使用不同的指標,你可能會得到另外一些內存使用Nullable <>? – Giraffe 2010-10-29 04:43:02

+1

@wcpro:如果它對於你想要建模的任何東西都有正確的含義,你應該選擇'可爲空''。 – jason 2010-10-29 04:56:24

3

Microsoft員工Eric Lippert doesn't like it當您參考生活在堆棧上的值類型時,但是,Nullable<>是值類型。

它們通常位於堆棧上,只是有一個布爾成員來指示值是否爲空。因此(不包括由alignment引起的填充字節)a Nullable<int>需要5個字節。

+0

所以,真的這佔用8個字節(填充),我錯了嗎? int int的方式效率低於int32嗎? – 2010-10-29 04:11:10

+0

實際上是8字節。在堆棧中,這不是一個問題 - 在堆棧上分配變量不需要花費時間,並且空間永遠不應該成爲問題(如果是這樣,則存在更大的問題)。數組雖然可以加起來 - 如果這是您的擔憂,您可以隨時創建一個泛型類,它將T的數組與一個指示非空值的BitArray類一起包裝,以及返回T的Nullable的索引函數。 – Mania 2010-10-29 08:54:38

相關問題