替代虛擬函數呼叫實作
在 C 中,透過虛擬機制促進動態綁定。雖然該標準指定了虛擬函數呼叫的預期行為,但具體實作因編譯器而異。虛擬表和虛擬指標機制被 G 和 Microsoft Visual Studio 等編譯器廣泛採用。
替代實作
儘管虛擬表方法很流行,但其他虛擬函數動態調度的實作確實存在。一種已知的替代方案涉及使用物件內指標來取代虛擬指標。此策略可以更有效地處理具有多個基數和數組的複雜對象,因為數組中的所有對像只需要映射表中的單個條目。
物件大小和虛擬函數
具有虛函數的類別的大小始終等於指標(虛擬指標)的大小的說法並不普遍正確。虛函數分派的實際實作會影響物件的大小。例如,在上面提到的替代實作中,由於物件內指標需要額外的儲存空間,具有虛擬函數的物件的大小可能會超過指標的大小。
的限制虛擬表
雖然虛擬表是動態調度的常見解決方案,但它們也有限制。例如,它們的使用可能會導致較大的虛擬函數表和緩慢的物件初始化,特別是對於具有多個基礎的複雜 mixin 物件。這個結果源自於子物件的運行時類型必須始終正確的要求,即使在建構期間也是如此。
替代資料結構
克服這些問題的一種方法限制是採用替代資料結構來儲存元資料。例如,Judy 陣列已用於建立物件位址與其對應元資料之間的高效映射。這種方法提供了快速查找和適度的儲存要求。
以上是虛函數是否總是添加物件指標的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!