《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选项,无论有没有级别数字,只有最后一个选项有效。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章