《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选项,无论有没有级别数字,只有最后一个选项有效。
《gcc五分钟系列》第十二节:编译期优化选项(三)——O(下)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.