C/C++編譯優化經驗

減少編譯

  1. CCache,安裝配置即可,對代碼無侵入,成本低、風險低。優化時需要想辦法提高cache命中率
  2. Lib庫,把一些穩定的代碼打包成庫,直接鏈接
  3. PCH(Percompiled Header),頭文件預編譯,要求頭文件變化不頻繁,且被大量include,對代碼有一定侵入,使用cmake組織工程的話,可以降低成本

並行編譯

  1. make -j,不用多說,充分利用多核進行編譯
  2. distcc,linux平臺利用網絡集羣進行編譯,需要考慮網絡時延與網絡穩定性

減少IO

  1. Unity Source,主要減少頭文件打開,展開開銷,減少生成.o與鏈接打包開銷。對於職責拆分比較細的大量小文件,優化效果非常明顯。
  2. tmpfs,臨時文件系統,是linux平臺下利用內存替代硬盤減少去IO的一種技術,跟硬件配置關係比較緊密
  3. 減少編譯腳本log輸出,文件Copy等操作

頭文件設計

  1. 避免設計不合理的大頭文件,相對於包含更多小的頭文件,嵌套更深的頭文件,包含內容更多的大頭文件展開、解析纔是影響編譯速度的主要因素
  2. C++模板,模板在編譯時要進行類型推導,會影響編譯速度與包大小,但相比於帶來的複用性、擴展性及性能收益,編譯成本不大
  3. 刪除沒有必要的頭文件,減少預編譯是頭文件展開時間
  4. 減少頭文件inline,頭文件inline是提高運行時性能的一種方法,但同時也會導致編譯速度,刪除非性能熱點的inline可以加快編譯速度
  5. 降低頭文件依賴,可以通過前置聲明等方式減少頭文件依賴,可以減少頭文件展開時間,對增量編譯也有很大收益
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章