虛函數調度的替代實現
雖然C 中的虛函數通常是透過虛表和虛指標實現的,但理論上是可以的
編譯器實作
關於第一個問題,確實大多數編譯器,包括G 和Microsoft Visual Studio,都使用下列方式實作虛擬函數調度虛擬表。然而,某些編譯器確實可能使用不同的技術。例如,某些語言使用物件內指標在物件本身中儲存虛擬函數資訊。
記憶體意義
至於第二個問題,具有虛函數的類別的sizeof 總是給定編譯器上指標的大小,這不一定是正確的。具有替代虛擬函數分派實作的編譯器可能會以不同的方式為虛擬函數資訊分配記憶體。
例如,提供的答案中提到的編譯器利用單獨的資料結構將物件位址對應到元資料。此實作為簡單物件分配更多儲存空間,但對於具有大量基數的複雜物件更有效,對於陣列更有效。此外,該實作還提供了對虛擬函數資訊的快速查找能力。
結論
雖然虛表和虛指標是最常見的實作方式,但值得注意的是存在用於在C 編譯器中實現虛函數分派的替代方法。了解這些替代方案可以進一步深入了解 C 程式的實作和效能特徵。
以上是C 中的虛擬函數調度是否有虛擬表的替代方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!