在SO和互聯網上的大多數答案都是「爲什麼應該struct small size」是指性能,但沒有一個解釋爲什麼爲。任何人都可以點亮它嗎?爲什麼小型結構可以提高大型結構的性能?
回答
Struct是一個值類型,當它被傳遞給函數時 - 它被複制。所以如果結構體大小爲512位 - 所有512位將被複制。如果你通過參考類型 - 只有32/64位參考這512位將被複制。從MSDN
接下來,引用類型賦值複製引用,而值類型賦值複製整個值。因此,大參考類型的分配比大值類型的分配便宜。
對不起,在這裏分割頭髮:除非你明確地通過引用傳遞,否則一切都通過C#中的值傳遞。當你傳遞一個引用類型時,引用本身被複制。這與C#中的引用傳遞不同。 –
@BrianRasmussen,同意,添加更多的細節來回答 – 4ybaka
@BrianRasmussen引用談論有關任務,而不是論證傳遞。 –
- 1. 可以構建什麼類型結構的綁定工作,
- 2. 爲什麼結構可以存儲自己的大小?
- 3. 爲什麼結構大小不正確
- 4. C++載體 - acessing型結構的矢量大小的結構
- 5. 提高大型結構列表的二進制序列化性能
- 6. 結構內結構,能夠改變內部結構類型
- 7. 柔性構件類型的結構?
- 8. 提高linq構建的樹形數據結構的性能
- 9. 什麼是「類型定義」的結構
- 10. 結構的大小
- 11. 古典結構與原型結構相比有什麼好處?
- 12. 將大型IIAF分割爲更小的函數是否可以提高性能?
- 13. scipy.io.loadmat爲大型matlab結構返回MemoryError
- 14. 爲什麼要更改結構大小,更改可執行文件的大小?
- 15. 結構原型
- 16. 模型結構
- 17. 結構類型
- 18. 結構型
- 19. 結構泛型
- 20. 無法將Weblogic結構類型轉換爲Oracle結構類型
- 21. 爲什麼更大的結構更慢?
- 22. 值類型數據結構不能接受爲什麼
- 23. 什麼是REBOL結構!數據類型?
- 24. 爲什麼添加一個額外的字段結構大大提高了它的性能?
- 25. 從更大的數據類型(結構)鑄造到更小的結構
- 26. 如何聲明內部有大型結構數組的結構
- 27. 爲什麼在替換舊庫時不能減小結構的大小?
- 28. 性能C結構對C++結構/
- 29. 爲什麼不同結構大小的輸出是相同的?
- 30. 爲什麼System.DateTime結構的佈局類型爲Auto?
因爲它是一個valuetype,並且在傳遞給方法或從方法返回或賦值時複製該值。 – leppie
@leppie那麼它的內存拷貝更少? –