要獲取更精確的測量值,請禁用 Geyserville,然後重新執行採樣“活動”。Geyserville 轉換的設計目的是通過降低頻率來節省電池並影響機器。結果,與頻率相關的某些事件比率與時間計算就變得不精確。
使用“過程間優化”(IPO) 開關進行編譯。使用“過程間優化”(IPO) 開關進行編譯時,編譯器有機會進行更多的優化,包括分支消除、函式內嵌、常數傳播以及循環不變數等等。
考慮減少抽像類以及虛擬與純虛擬方法的數量。在 C++ 中使用它們時,編譯器產生一個 VTable,將使用的每個方法編譯成處理器很難預測的間接呼叫。儘可能減少抽像類與虛擬方法的使用。
如果可能,請考慮使用顯式函式呼叫。在 C++ 中使用繼承時,從基類呼叫方法編譯成從類的 VTable 進行間接呼叫。處理器很難預測這些呼叫,並且會導致效能懲罰。如果可以,請將這些呼叫替換成對實際對像類的顯式呼叫。
考慮減少函式指針的使用。函式指針編譯成處理器很難預測的間接呼叫,並且會導致效能懲罰。儘可能減少函式指針的使用。
通過基類處理對像時,考慮按型別給對像排序。處理從基類衍生的大量對像時,嘗試首先按型別給它們排序或分組。這可以使分支預測機制能夠正確預測在此種情況下產生的間接呼叫。
儘可能消除分支。