在我的類設計中,我廣泛使用抽象類和虛函數。我感覺虛擬功能會影響性能。這是真的?但我認為這種性能差異并不明顯,看起來我正在做過早的優化。對?
3 回答
慕沐林林
TA貢獻2016條經驗 獲得超9個贊
一個好的經驗法則是:
在你證明這一點之前,這不是一個性能問題。
虛函數的使用對性能影響很小,但不太可能影響應用程序的整體性能。尋找性能改進的更好地方是算法和I / O.
一篇關于虛函數(以及更多)的優秀文章是成員函數指針和最快可能的C ++代表。
肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
在性能非常關鍵的應用程序(如視頻游戲)中,虛擬函數調用可能太慢。使用現代硬件,最大的性能問題是緩存未命中。如果數據不在緩存中,則在可用之前可能需要數百個周期。
當CPU獲取新函數的第一條指令并且它不在緩存中時,正常函數調用可以生成指令緩存未命中。
虛函數調用首先需要從對象加載vtable指針。這可能導致數據緩存未命中。然后它從vtable加載函數指針,這可能導致另一個數據緩存未命中。然后它調用可能導致指令高速緩存未命中的函數,如非虛函數。
在許多情況下,兩個額外的緩存未命中并不是一個問題,但在性能關鍵代碼的緊密循環中,它可以大大降低性能。
- 3 回答
- 0 關注
- 658 瀏覽
添加回答
舉報
0/150
提交
取消
