[英]Performance function call vs multiplication by 1
看一下這個功能:
float process(float in) {
float out = in;
for (int i = 0; i < 31; ++i) {
if (biquads_[i]) {
out = biquads_[i]->filter(out);
}
}
return out;
}
biquads_
是std::optional<Biquad>[31]
。
在這種情況下,我檢查每個可選項以檢查其是否不為空,然后調用biquad的filter函數,如果相反,我無條件調用filter函數,將其更改為乘以1或簡單地返回輸入值,會更有效嗎?
它很可能不會帶來任何改變(盡管由於您的問題尚不完全清楚,所以還是有所猜測)。 出於兩個原因:1)除非代碼會在非常熱的路徑中使用,否則即使一種方法比另一種方法快幾納秒也沒關系。 2)最有可能的是,您的編譯器優化器將足夠聰明,可以生成在兩種情況下都可以執行(即使不完全相同)的代碼。 你測試了嗎? 您有基准測試/配置文件嗎? 如果不; 這樣做的- 與優化功能。
努力編寫清晰,可讀,可維護的代碼。 當您實際遇到問題並且探查器指向您的熱點功能時,稍后再擔心微優化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.