取代虛擬函式呼叫實作
在 C 中,透過虛擬機制促進動態綁定。雖然該標準指定了虛擬函數呼叫的預期行為,但具體實作因編譯器而異。虛擬表和虛擬指標機制被 G 和 Microsoft Visual Studio 等編譯器廣泛採用。
替代實作
儘管虛擬表方法很流行,但其他虛擬函數動態調度的實作確實存在。一種已知的替代方案涉及使用物件內指標而不是虛擬指標。此策略允許更有效地處理具有多個基數和數組的複雜對象,因為數組中的所有對像只需要映射表中的單個條目。
物件大小和虛擬函數
具有虛函數的類別的大小始終等於指標(虛擬指標)的大小的說法並不普遍正確。虛函數分派的實際實作會影響物件的大小。例如,在上述替代實作中,由於物件內指標需要額外的儲存空間,具有虛擬函數的物件的大小可能會超過指標的大小。
的限制虛擬表
雖然虛擬表是動態調度的常見解決方案,但它們也有限制。例如,它們的使用可能會導致較大的虛擬函數表和緩慢的物件初始化,特別是對於具有多個基礎的複雜 mixin 物件。這個結果源自於子物件的運行時類型必須始終正確的要求,即使在建構過程中也是如此。
替代資料結構
克服這些問題的一種方法限制是採用替代資料結構來儲存元資料。例如,Judy 陣列已用於建立物件位址與其對應元資料之間的高效映射。這種方法提供快速查找和適度的儲存要求。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3