簡體   English   中英

為什么 Vector3 是統一的結構類型?

[英]Why Vector3 is struct type in unity?

根據文檔,單位Vector3是值類型。 同樣根據文檔“默認情況下,在賦值時,將參數傳遞給方法並返回方法結果,復制變量值。在值類型變量的情況下,復制相應的類型實例”。

不是性能、指針等方面的專家,但我認為通過引用而不是通過值傳遞 arguments 以避免復制實例的事實是關於性能的好習慣。 這就是為什么 c# 中的大多數類型都是引用類型的原因。

RaycastHit結構也一樣。

據我研究的類和結構有以下基本區別

  • 類是引用類型,結構是值類型
  • 結構不支持 inheritance
  • 結構不能有默認構造函數

對於我來說,這一切都不能證明放棄 ref 類型優勢的性能是合理的,所以,主要是Vector3 ,在任何游戲中都會有向量作為 arguments 傳遞,所以在整個應用程序中復制,它是結構類型的原因是什么?

在比較類(引用類型)和結構(值類型)的性能時,我們不能說一個比另一個性能更好。 答案是:“這取決於”。

類在堆上分配,並被垃圾收集,與結構相比,這是一種開銷。

正如您所提到的,結構在傳遞時會被復制,這與類相比也是一種開銷(這並不是結構大小很小的開銷,這就是為什么設計指南在選擇結構時提到了大小限制)。

每個設計指南的一些一般規則是:

✔️ 如果類型的實例很小且通常短暫存在或通常嵌入在其他對象中,請考慮定義結構而不是 class。

❌ 避免定義結構,除非該類型具有以下所有特征:

  • 它在邏輯上表示單個值,類似於原始類型(int、double 等)。
  • 它的實例大小小於 16 個字節。
  • 它是不可變的。
  • 它不必經常裝箱。

實際上,當您有疑問時,您應該針對您的特定場景進行基准測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM