提問場景
函數 b() 多次調用 a(),想將 a() 代碼「內聯」到 b() 內部,避免調用開銷與重複對象創建。
現代編譯器行為
- C++:
inline 關鍵字僅是建議,優化等級 -O2/-O3 時編譯器自動決定是否內聯
- C#:JIT 編譯器在運行時根據調用頻率、方法大小自動內聯
手動合併的弊端
- 代碼膨脹,破壞單一職責原則
- 可讀性、可維護性大幅下降
- 阻礙編譯器進一步優化(如公共子表達式消除)
- 調試困難,調用棧信息丟失
最佳實踐
- 保持函數細粒度、單一功能
- 信任編譯器優化(開啟 Release 模式優化)
- 真正有性能瓶頸時,用 Profiler 定位,再考慮有針對性的手動優化
「過早優化是萬惡之源」—— Knuth