如果你有Nullable<int>
,這是住在堆棧上嗎?它佔用了多少字節?存儲在棧上的可爲空類型嗎?
回答
它不應該是正確回答你的兩個問題。
但是,爲了招待你,Nullable<T>
不是集合元素的實例不是引用類型的字段,也不是迭代器塊中的本地元素,或者是lambda或匿名方法可能存儲在堆棧中。
但是,它不應該的問題。這是一個實現細節(這意味着它可能是Microsoft實現CLR的一種方式,但它不一定是,而且它可能是Mono實現CLR的另一種方式)。
Microsoft員工Eric Lippert doesn't like it當您參考生活在堆棧上的值類型時,但是,Nullable<>
是值類型。
它們通常位於堆棧上,只是有一個布爾成員來指示值是否爲空。因此(不包括由alignment引起的填充字節)a Nullable<int>
需要5個字節。
所以,真的這佔用8個字節(填充),我錯了嗎? int int的方式效率低於int32嗎? – 2010-10-29 04:11:10
實際上是8字節。在堆棧中,這不是一個問題 - 在堆棧上分配變量不需要花費時間,並且空間永遠不應該成爲問題(如果是這樣,則存在更大的問題)。數組雖然可以加起來 - 如果這是您的擔憂,您可以隨時創建一個泛型類,它將T的數組與一個指示非空值的BitArray類一起包裝,以及返回T的Nullable的索引函數。 – Mania 2010-10-29 08:54:38
A Nullable<T>
是一個結構(因此是一個值類型),所以分配位置的相同規則適用於任何其他結構。
埃裏克利珀最近發佈了此:The Truth About Value Types
- 1. C# - 列表存儲可空類型
- 2. 堆棧上的C++存儲保存在堆棧上
- 3. 我可以在Redis中存儲這種類型的數據嗎?
- 4. 我可以在GtkListStore中存儲未指定的類型嗎?
- 5. 我可以使用unsafecorce作爲存儲類型類的hashkey/comaprison鍵嗎?
- 6. 可空類型不可爲空
- 7. 字符串類型的局部變量存儲在堆棧或堆上?
- 8. C#可爲空的變量仍然作爲值類型嗎?
- 9. 將可空類型轉換爲不可空類型?
- 10. 可以存儲浮點類型數組中的id值嗎?
- 11. 可爲空或非空varchar數據類型 - 查詢更快嗎?
- 12. TryParse爲可空類型
- 13. MySQL位數據類型存儲空間
- 14. Convert.ChangeType()在可空類型上失敗
- 15. Clojure可變的存儲類型
- 16. 與IComparable一起使用的可爲空的泛型類型。可能嗎?
- 17. 什麼類型的數據可以類類型存儲?
- 18. 可爲空類型作爲通用參數嗎?
- 19. 實體框架CF可以存儲「對象類型」值嗎?
- 20. 爲空的類型入門類型定義打破了非可空類型
- 21. 可以在泛型類中使用可爲空的運算符嗎?
- 22. 從一個空類型轉換爲另一種可空類型
- 23. @NamedStoredProcedureQuery Spring數據JPA存儲庫 - 類型不能爲空錯誤
- 24. LINQ可空類型的聚集行爲
- 25. 可爲空的對象類型
- 26. 可以將受過訓練的分類模型存儲在Apache Spark中嗎?
- 27. C#/ WPF:我可以在剪貼板中存儲更多的1種類型嗎?
- 28. 存儲庫類型
- 29. 從虛空鑄造,存儲在地圖任何類型的
- 30. 在mysql數據庫中哪個表存儲爲MyISAM類型,哪個表存儲爲InnoDB類型?爲什麼?
你是對的。不是太重要,只是想明白到底發生了什麼。如果可空佔用2內存幀和int佔用1然後我會假設1更有效率,我錯了嗎? –
2010-10-29 04:12:26
如果你正在考慮使用Nullable那麼我猜你可能會在意這個int的無效性,所以如果你不想使用不同的指標,你可能會得到另外一些內存使用Nullable <>? –
Giraffe
2010-10-29 04:43:02
@wcpro:如果它對於你想要建模的任何東西都有正確的含義,你應該選擇'可爲空''。 –
jason
2010-10-29 04:56:24