C 中虛擬函數的效能影響
您表達了對類別設計中虛擬函數效能影響的擔憂。這是一個合理的擔憂,還是可以被視為過早優化?
為了解決您的問題,我們在 3GHz PowerPC CPU 上進行了效能測試。我們創建了一個帶有 get/set 函數的簡單 4D 向量類別。我們使用定義為內聯、虛擬和常規函數呼叫的函數進行測試。
以下是結果:
- 內聯:8ms(每次調用0.65ns)
- 直接:68ms(每次調用5.53ns)
- 虛擬:160ms(每次調用13ns)
在這種情況下,資料適合L1 緩存,虛擬函數呼叫為比內聯呼叫慢大約20 倍。然而,考慮這種性能差異的背景至關重要。
測試循環的每次迭代都涉及 12,288 次函數呼叫。因此,虛擬循環比直接循環花費了 92 毫秒,導致每次函數呼叫僅額外增加 7 奈秒的開銷。
根據這些結果,我們得出結論:
- 虛擬函數確實比直接函數慢。
- 效能損失可以忽略不計,除非您打算極其頻繁地呼叫它們(每秒數百萬次)。
在大多數情況下,除非針對極端效能進行最佳化,否則與使用虛擬函數進行封裝和靈活性相關的權衡超過了任何潛在的效能問題。
以上是C 中的虛擬函數是效能瓶頸嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!