4
A
回答
7
簡短的回答:
號實際上,它將使用32位機器上的12個字節,在64位的24個字節。
長的答案
一個dynamic
類型將被存儲爲一個對象,但在運行時,編譯器會加載更多的字節,以什麼與dynamic
類型做感。爲了做到這一點,將會用更多的內存來解決這個問題。將dynamic
想象爲看中對象。
這裏是一個類:
class Mine
{
}
這裏是在32位用於上述目的的開銷:
-------------------------- -4 bytes
| Object Header Word |
|------------------------| +0 bytes
| Method Table Pointer |
|------------------------| +4 bytes for Method Table Pointer
總共12個字節,需要由於最小的引用類型被分配給它的在32位上是12個字節。
如果一個字段添加到類像這樣:
class Mine
{
public int Field = 1488;
}
它仍然需要12個字節,因爲開銷和int
場可以容納12個字節。
如果我們添加另一個int
字段,則需要16個字節。
但是,如果我們一個dynamic
字段添加到類像這樣:
class Mine
{
public dynamic Field = (int)1488;
}
它將不是12個字節。動態字段將被視爲object
,因此大小將爲12 + 12 = 24字節。
有意思的是,如果你這樣做,而不是:
class Mine
{
public dynamic Field = (bool)false;
}
的Mine
一個實例仍然需要24個字節,因爲即使動態字段僅僅是一個布爾值,它仍然像對待一個object
。
在64位機器上,由於64位上的最小參考類型爲24個字節(24 + 24 = 48個字節),因此動態的Mine
實例需要48個字節。
相關問題
- 1. C++檢測動態庫的內存使用情況
- 2. C#類實例的靜態方法VS靜態類的內存使用情況
- 3. 堆棧vs堆棧內存使用情況C++用於動態創建的類
- 4. 活動中的內存使用情況
- 5. JavaScript類的內存使用情況
- 6. 類別的PHP內存使用情況
- 7. matplotlib動畫的內存使用情況
- 8. Objective-C內存使用情況
- 9. C++指針內存使用情況
- 10. 如何確定python類型的內存使用情況?
- 11. Tcl_Format內存使用情況
- 12. Silverlight內存使用情況
- 13. BlackBerry內存使用情況
- 14. php內存使用情況
- 15. iphone內存使用情況
- 16. IronPython內存使用情況
- 17. CCLabelBMFont內存使用情況
- 18. Android內存使用情況
- 19. GPUImage內存使用情況
- 20. Java內存使用情況
- 21. Linux內存使用情況
- 22. Listview內存使用情況
- 23. V8內存使用情況
- 24. 內存使用情況
- 25. java內存使用情況
- 26. IIS內存使用情況
- 27. Silverlight內存使用情況
- 28. cmd內存使用情況
- 29. MYSQL內存使用情況
- 30. mod_wsgi內存使用情況
底層變量仍然是一個'int',所以是的值是4個字節。儘管如此,程序使用動態會有一些額外的一般開銷。 –
「動態」僅僅是一個「對象」,它使用一堆幻想的Reflection來使它像一個動態類型。它不會佔用比它實際表示的類型更多或更少的數據。 – Abion47
你的答案在這裏。 (請注意第一個例子,動態類型和對象類型都返回System.Int32類型。)https://msdn.microsoft.com/en-us/library/dd264741.aspx – Sparrow