可能重複:
Virtual functions and performance - C++什麼讓虛擬功能如此緩慢? C++
我想修改我的代碼,到處有人說,使用虛擬函數是一個huuuuge NONO的性能,明智的,爲什麼呢?有沒有另一種方法可以繼承一個類並重新定義基類中定義的函數?
可能重複:
Virtual functions and performance - C++什麼讓虛擬功能如此緩慢? C++
我想修改我的代碼,到處有人說,使用虛擬函數是一個huuuuge NONO的性能,明智的,爲什麼呢?有沒有另一種方法可以繼承一個類並重新定義基類中定義的函數?
這個主題一個很好的參考文章可以在這裏找到:http://coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/3
對於懶惰,我想答案是「可能稍微慢」
虛擬函數通過vtable調用,它基本上是一個函數指針數組。所以,每次被調用時,都會有一個額外的數組查找。我不確定我是否可以稱其爲huuuuge nono,但通常它們應該非常快。
從維基百科:
虛擬呼叫至少需要一個額外的索引解引用,並 有時一個「修正」此外,相比於非虛擬呼叫,這是 只是跳轉到一個編譯指針。因此,調用虛擬函數本質上比調用非虛函數要慢。在1996年完成的一個 實驗表明,儘管開銷可以高達50%,但執行時間的大約6-13%僅用於調度到正確的功能 。[4]在現代CPU體系結構中虛擬 函數的成本可能不會那麼高,這是由於更大的緩存和更好的分支預測。
這是實現定義,但大多數實現這樣做。 – 2012-04-19 17:59:39
我也猜測自1996年以來,編譯器已經走過了很長一段路:) – 2012-04-19 18:04:05
誰告訴你的? – 2012-04-19 17:56:33
你確實有性能問題嗎? – 2012-04-19 18:12:42