2012-04-19 14 views

回答

1

虛擬函數通過vtable調用,它基本上是一個函數指針數組。所以,每次被調用時,都會有一個額外的數組查找。我不確定我是否可以稱其爲huuuuge nono,但通常它們應該非常快。

維基百科

虛擬呼叫至少需要一個額外的索引解引用,並 有時一個「修正」此外,相比於非虛擬呼叫,這是 只是跳轉到一個編譯指針。因此,調用虛擬函數本質上比調用非虛函數要慢。在1996年完成的一個 實驗表明,儘管開銷可以高達50%,但執行時間的大約6-13%僅用於調度到正確的功能 。[4]在現代CPU體系結構中虛擬 函數的成本可能不會那麼高,這是由於更大的緩存和更好的分支預測。

+0

這是實現定義,但大多數實現這樣做。 – 2012-04-19 17:59:39

+0

我也猜測自1996年以來,編譯器已經走過了很長一段路:) – 2012-04-19 18:04:05