1
問題很簡單 - 檢查給函數的實際參數是否會導致性能損失?實際參數檢查性能影響
導出的庫函數通常傾向於以檢查用戶代碼傳遞的實際參數:
if (arg1 == NULL || arg2 == NULL)
return -EINVAL;
這是否檢查性能產生負面影響?我嘗試通過從某些導出的函數中刪除這些檢查來優化某些庫代碼(依賴於我是一個行爲良好的用戶並始終傳遞有效參數),但我注意到沒有真正的改進。
我的第一個猜測是現代處理器上的分支預測會假設if分支沒有被採用,並且繼續執行代碼而沒有真正的懲罰。如果這確實是原因 - 這種分支預測機制的侷限性是什麼?是否有消除這些檢查會提高性能的情況?在C這樣的本地編譯語言和解釋或VM語言(如Python和Java)之間如何變化?
順便說一句 - 我意識到檢查運行時參數的重要性。我只對性能方面感興趣。
您需要廣泛地標定這種事情才能真正知道。沒有明確的答案。另外,查看Linux內核的'__likely'和'__unlikely'宏。 –
您可能會發現[this](http://stackoverflow.com/a/11227902/2681632)有趣。 –
一個更好的問題是檢查'NULL'的參數是否有用。有*豐富*非'NULL'指針,不能傳遞給期望有效輸入的函數。一個'assert()'可能更合理。 – EOF