據說valueetype派生自system.object。爲什麼對象派生類比valuetype結構佔用更多空間? 在此先感謝爲什麼在.NET中,valutype比對象類型佔用更少的空間?
回答
每個對象都有一個對象標題。這在32位機器上是8個字節,4個是同步塊,4個是類型句柄。值類型值只有在裝箱時才從System.Object派生。整數是拆箱時的4個字節,裝箱時爲12個字節,標題爲+8個字節。
檢查this answer以獲得有關盒裝值類型的更多信息。
+1,優秀的解釋。 – 2011-03-21 23:11:04
值類型* always *從Object派生,並且裝箱值類型不會將其變爲對象,它只存儲在對象內。盒裝的int在32位系統上使用16個字節,在64位系統上使用20個字節。 – Guffa 2011-03-21 23:14:33
@Guffa - 你可以使用鏈接的答案,看看這是不正確的。創建兩個對象。 – 2011-03-21 23:20:30
因爲值類型由編譯器處理不同。儘管它們從Object
繼承,但它們不作爲對象存儲。
對象存儲在堆上,額外開銷兩個指針(32位系統上8個字節,64位系統上16個字節)。值類型以內聯方式存儲,可以作爲對象的一部分存儲,也可以存儲在方法調用的堆棧框架中,並且沒有額外的開銷。
對於從ValueType繼承的值類型以及Object中的值類型,大部分時間都有一點點白色的謊言。未裝箱的int或bool沒有與之相關的與該繼承相關的任何內容。但是,如果它是盒裝的(它會在某些操作中隱含地發生)就會獲得它。大多數語言都將它隱藏起來,所以只要我們使用它們,它們看起來就像從Object派生的任何其他對象一樣,但是當我們將它們用作它們時,它們也可以作爲簡單類型。
- 1. 爲什麼p元素佔用比需要更多的空間?
- 2. 什麼佔據更多的空間:對象還是結構?
- 3. 爲什麼ibdata1文件佔用的空間比.frm + .MYD + .MYI文件少?
- 4. $(「#my_input」)。val()的值比$(「#my_input」)佔用更少的空間嗎?
- 5. 爲什麼在.NET中確定對象類型?
- 6. 什麼是佔用的內存空間供參考和對象
- 7. 爲什麼這個Flow Document會佔用比需要更多的空間?
- 8. 爲什麼宏需要比等價定義的函數佔用更多空間?
- 9. 在64位系統中,32位變量比64位對象佔用更少的空間?
- 10. 爲什麼沒有成員變量的C++類佔用空間?
- 11. .Net中的dr [「MyColumn」]對象的類名稱/類型是什麼?
- 12. 使元素不佔用比分配空間更多的空間
- 13. 爲什麼SQL select在java中佔用更多的CPU時間?
- 14. 爲什麼空的IndexedDB仍佔用空間?
- 15. 爲什麼對象類不是空值
- 16. 爲什麼使用NEWID()使用比NEWSEQUENTIALID()更多的空間?
- 17. 自定義包裝類比Java包裝類佔用更多/更少的空間嗎?
- 18. 什麼是佔用網頁空間?
- 19. 爲什麼繼承對象類型
- 20. 爲什麼HTML元素佔用的空間比應該多得多?
- 21. 空對象類型和對象有什麼區別?
- 22. CardLayout - 使其佔用最少的空間
- 23. 有沒有辦法以編程方式知道對象在內存中佔用了多少空間? (.Net 2.0)
- 24. 使用.Net中的另一個相同類型的對象更新對象的最佳方法是什麼?
- 25. 什麼是「[對象類型]」
- 26. 創建泛型類對象時,我得到空值。爲什麼?
- 27. 爲什麼在Android中沒有Java.util.concurrent.TimeUnit類型比SECONDS更大?
- 28. H3正在佔用比封閉div更多的空間
- 29. 爲什麼在使用PowerShell比較對象比較兩個數組時需要更改數據類型?
- 30. 爲什麼製表符分隔的文件佔用的空間少於逗號分隔的空間?
'據說valuetype派生自system.object.' - 我想知道這說的是什麼,如果你發現一些消息來源聲稱,我會建議你避免它作爲學習材料。 – 2011-03-21 23:05:46
@Darin - 'ValueType'派生自System.Object:http://msdn.microsoft.com/en-us/library/system.valuetype(v=VS.100).aspx。然而,它和它的派生類型是由CLR和編譯器以特殊方式處理的,所以它肯定不會像它那樣工作......但是參考資料說對象是一切的基礎,我看到了海報的混亂(裝箱是一個複雜的話題) – 2011-03-21 23:12:53
@Darin你有一些聲稱相反的消息來源嗎?我認爲'ValueType'在技術上來自'Object',甚至是一個引用類型本身。但是,當然任何具體的值類型轉換爲「ValueType」或「對象」是一種拳擊轉換。 – CodesInChaos 2011-03-21 23:13:35