《gcc五分鐘系列》第十二節:編譯期優化選項(三)——O(下)

《gcc五分鐘系列》第十二節:編譯期優化選項(三)——O(下)

    這節內容有些無聊,只是把O選項相關的文檔翻譯出來。想了解的可以瞭解下,想深入瞭解的可以去看gcc的man手冊。
    括號裏面的是我自己的想法,剩下的是gcc的man手冊中關於O選項的翻譯。
   
    -O
    -O1 優化。優化編譯將多花費一些時間,還會在編譯大函數的時候消耗更多的內存。
        加上-O選項以後,編譯器試圖減少生成可執行文件的大小和運行時間。相比於不加優化將花費大量的編譯時間。
       
        -O選項啓用以下優化器:
        -fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
        -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion
        -fipa-pure-const -fipa-reference -fmerge-constants -fshrink-wrap
        -fsplit-wide-types -ftree-builtin-call-dce -ftree-ccp -ftree-ch
        -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
        -ftree-forwprop -ftree-fre -ftree-phiprop -ftree-sra -ftree-pta
        -ftree-ter -funit-at-a-time
       
        在那些不會影響調試的設備上,-O選項也會啓動-fomit-frame-pointer優化器。
       
    -O2 更多的優化。GCC將在不需要用空間換取時間的條件下,啓用幾乎所有支持的優化器。與-O選項比較,這個選項雖然增加了編譯的時間,但生成的代碼更加高效了。
       
        -O2選項除了啓用-O選項的所有優化器外,還將啓用以下優化器:
        -fthread-jumps
       -falign-functions  -falign-jumps -falign-loops  -falign-labels
       -fcaller-saves -fcrossjumping -fcse-follow-jumps  -fcse-skip-blocks
       -fdelete-null-pointer-checks -fexpensive-optimizations -fgcse
       -fgcse-lm -finline-small-functions -findirect-inlining -fipa-sra
       -foptimize-sibling-calls -fpeephole2 -fregmove -freorder-blocks
       -freorder-functions -frerun-cse-after-loop -fsched-interblock
       -fsched-spec -fschedule-insns  -fschedule-insns2 -fstrict-aliasing
       -fstrict-overflow -ftree-if-to-switch-conversion
       -ftree-switch-conversion -ftree-pre -ftree-vrp
   
    -O3 最多的優化。-O3選項啓用-O2的全部優化器,還將啓用以下優化器:
        -finline-functions, -funswitch-loops,
       -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize and
       -fipa-cp-clone options.

    -O0 減少編譯時間並讓調試程序得到期望的結果。這個是默認值。
   
    -Os 空間優化。-Os啓用-O2選項的所有不會增加生成可執行文件大小的優化器外,還會爲減少生成可執行文件的大小做更多的優化。
        -Os禁用以下優化器:-falign-functions
       -falign-jumps  -falign-loops -falign-labels  -freorder-blocks
       -freorder-blocks-and-partition -fprefetch-loop-arrays
       -ftree-vect-loop-version
      
       如果您同時啓用多個-O選項,無論有沒有級別數字,只有最後一個選項有效。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章