最佳化程式碼速度/透過減少功能集最佳化
外觀
< 最佳化程式碼速度
"天下沒有免費的午餐"。你的程式功能越多,實現它們所需的程式碼就越多,反過來會消耗更多記憶體,並減慢速度。此外,它需要更多條件語句,甚至迴圈,這也需要額外的處理。因此,透過從應用程式中刪除功能,可以使程式碼更快。
例如,在 "微軟是如何輸掉 API 戰爭的" 中,Joel Spolsky 講述了微軟為了維護其 Windows 作業系統系列的 bug 到 bug(二進位制)向後相容性付出了巨大的努力。結果,依賴於 API quirks(這些 quirks 發生了改變)的錯誤軟體,通常仍然可以在 Windows 的更高版本中工作,因為微軟確保 Windows 為它們提供了類似的環境。由於維護了所有這些向後相容性,微軟產品中的程式碼更多,這可能導致了它們在每次釋出中都變慢這一普遍而臭名昭著的看法。
此外,我們可以說,通常 bug 修復(例如邊界檢查、健全性檢查等)會對程式的效能產生負面影響,因此不修復這些 bug 或引入新的 bug 也是一種可能的最佳化方式(但不是一個非常推薦的方式)。
我可以更進一步,並聲稱,通常可以透過犧牲程式碼的安全來最佳化程式碼。程式碼的健全性檢查、輸入檢查等越少,執行速度就越快。例如,一個沒有進行大量動態記憶體分配呼叫(在沒有進行管理式程式設計的 C 等語言中)失敗檢查(以及優雅處理)的程式碼,例如malloc(),將執行得更快。(直到它執行到記憶體不足並崩潰為止。)
我在某個地方讀到過 程式設計師抱怨,檢查和處理程式中的錯誤需要他們編寫大約 4 倍的程式碼,這是有道理的。當一切按預期執行時,所有這些程式碼都會減慢程式速度。
請注意,“前方有危險”。為了提高速度而犧牲安全可能永遠不是一個好主意。但我在這裡提到了它,為了完整起見。