簡體   English   中英

何時為gcc使用-O2標志?

[英]When to use -O2 flag for gcc?

如果我使用“-O2”標志,性能會提高,但編譯時間會變長。

我該如何決定是否使用它?

也許O2在某些特定類型的代碼中有很大差異(例如數學計算?),我應該只將它用於項目的那些部分?

編輯:我想強調的是,為項目的所有組件設置-O2會將總編譯時間從10分鍾更改為30分鍾。

我建議大多數時候使用-O2,好處包括:

  • 通常會減少生成代碼的大小(與-O3不同)。
  • 更多警告(某些警告需要僅在優化期間進行分析)
  • 通常可以顯着改善性能(這可能無關緊要)。

如果發布級代碼將啟用優化,則最好在整個開發/測試周期中啟用優化。

啟用優化后,源級調試會更加困難,有時在調試問題時禁用優化會很有幫助。

我在生物信息學方面,所以我的建議可能有偏見。 也就是說,我總是使用-O3開關(用於發布和測試版本,即通常不用於調試)。 確實,它有一些缺點,即增加編譯時間和通常可執行文件的大小。

但是,第一個因素可以通過良好的構建策略和其他減少整體構建時間的技巧來部分緩解。 此外,由於大多數編譯實際上是I / O綁定的,因此編譯時間的增加通常不那么明顯。

第二個缺點,即可執行文件的大小,通常根本不重要。

決不。

使用-O3 -Wall -Werror -std = [無論你的代碼庫應該遵循什么]

總是,除非你正在編程並且只想測試你剛寫的東西。

我們通常設置構建環境,以便我們可以構建使用-O0的調試版本發布使用-O3的版本(構建環境保留所有配置的對象和庫,以便可以在配置之間輕松切換)。 在開發期間,一個主要構建和運行調試配置以實現更快的構建速度(以及更准確的調試信息),並且不太經常地構建和測試發布配置。

增加的編譯時間真的很明顯嗎? 我一直使用-O2作為默認值,不再只是在你的代碼中留下了很多“摩擦”。 另請注意,-O1,-O2的優化級別往往是最好的測試,因為它們最有趣。 -O0往往更加錯誤,你可以根據我的經驗調試-O2。 如果你對編譯器在代碼重新排序,內聯等方面可以做些什么有所了解。

-Werror -Wall是必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM