zoukankan      html  css  js  c++  java
  • 关于-O0、O1、O2、O3优化

    少优化->多优化:

    O0 -->> O1 -->> O2 -->> O3

    -O0表示没有优化,-O1为缺省值,-O3优化级别最高

    整理自网络,仅供参考

    1.-O,-O1:
    这两个命令的效果是一样的,目的都是在不影响编译速度的前提下,尽量采用一些优化算法降低代码大小和可执行代码的运行速度。并开启如下的优化选项:

    -fauto-inc-dec

    -fbranch-count-reg

    -fcombine-stack-adjustments

    -fcompare-elim

    -fcprop-registers

    -fdce

    -fdefer-pop

    -fdelayed-branch

    -fdse

    -fforward-propagate

    -fguess-branch-probability

    -fif-conversion2

    -fif-conversion

    -finline-functions-called-once

    -fipa-pure-const

    -fipa-profile

    -fipa-reference

    -fmerge-constants

    -fmove-loop-invariants

    -freorder-blocks

    -fshrink-wrap

    -fshrink-wrap-separate

    -fsplit-wide-types

    -fssa-backprop

    -fssa-phiopt

    -fstore-merging

    -ftree-bit-ccp

    -ftree-ccp

    -ftree-ch

    -ftree-coalesce-vars

    -ftree-copy-prop

    -ftree-dce

    -ftree-dominator-opts

    -ftree-dse

    -ftree-forwprop

    -ftree-fre

    -ftree-phiprop

    -ftree-sink

    -ftree-slsr

    -ftree-sra

    -ftree-pta

    -ftree-ter

    -funit-at-a-time

    2. -O2

    //标配
    该优化选项会牺牲部分编译速度,除了执行-O1所执行的所有优化之外,还会采用几乎所有的目标配置支持的优化算法,用以提高目标代码的运行速度。

    -fthread-jumps

    -falign-functions  -falign-jumps

    -falign-loops  -falign-labels

    -fcaller-saves

    -fcrossjumping

    -fcse-follow-jumps  -fcse-skip-blocks

    -fdelete-null-pointer-checks

    -fdevirtualize -fdevirtualize-speculatively

    -fexpensive-optimizations

    -fgcse  -fgcse-lm 

    -fhoist-adjacent-loads

    -finline-small-functions

    -findirect-inlining

    -fipa-cp

    -fipa-cp-alignment

    -fipa-bit-cp

    -fipa-sra

    -fipa-icf

    -fisolate-erroneous-paths-dereference

    -flra-remat

    -foptimize-sibling-calls

    -foptimize-strlen

    -fpartial-inlining

    -fpeephole2

    -freorder-blocks-algorithm=stc

    -freorder-blocks-and-partition -freorder-functions

    -frerun-cse-after-loop 

    -fsched-interblock  -fsched-spec

    -fschedule-insns  -fschedule-insns2

    -fstrict-aliasing -fstrict-overflow

    -ftree-builtin-call-dce

    -ftree-switch-conversion -ftree-tail-merge

    -fcode-hoisting

    -ftree-pre

    -ftree-vrp

    -fipa-ra


    3. -O3
    该选项除了执行-O2所有的优化选项之外,一般都是采取很多向量化算法,提高代码的并行执行程度,利用现代CPU中的流水线,Cache等。

    这是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。

    -finline-functions      // 采用一些启发式算法对函数进行内联

    -funswitch-loops        // 执行循环unswitch变换

    -fpredictive-commoning  //

    -fgcse-after-reload     //执行全局的共同子表达式消除

    -ftree-loop-vectorize   //

    -ftree-loop-distribute-patterns

    -fsplit-paths

    -ftree-slp-vectorize

    -fvect-cost-model

    -ftree-partial-pre

    -fpeel-loops

    -fipa-cp-clone options

    这个选项会提高执行代码的大小,当然会降低目标代码的执行时间。

    4. -Os
    这个优化标识和-O3有异曲同工之妙,当然两者的目标不一样,-O3的目标是宁愿增加目标代码的大小,也要拼命的提高运行速度,但是这个选项是在-O2的基础之上,尽量的降低目标代码的大小,这对于存储容量很小的设备来说非常重要。

    这个等级用来优化代码尺寸。其中启用了-O2中不会增加磁盘空间占用的代码生成选项。这对于磁盘空间极其紧张或者CPU缓存较小的机器非常有用。但也可能产生些许问题,因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。

    为了降低目标代码大小,会禁用下列优化选项,一般就是压缩内存中的对齐空白(alignment padding)

    -falign-functions 

    -falign-jumps 

    -falign-loops

    -falign-labels

    -freorder-blocks 

    -freorder-blocks-algorithm=stc

    -freorder-blocks-and-partition 

    -fprefetch-loop-arrays

    5. -Ofast:
    该选项将不会严格遵循语言标准,除了启用所有的-O3优化选项之外,也会针对某些语言启用部分优化。如:-ffast-math ,对于Fortran语言,还会启用下列选项:

    -fno-protect-parens

    -fstack-arrays

    6.-Og:
    该标识会精心挑选部分与-g选项不冲突的优化选项,当然就能提供合理的优化水平,同时产生较好的可调试信息和对语言标准的遵循程度。

     

  • 相关阅读:
    HDU 4539郑厂长系列故事――排兵布阵(状压DP)
    HDU 2196Computer(树形DP)
    HDU 4284Travel(状压DP)
    HDU 1520Anniversary party(树型DP)
    HDU 3920Clear All of Them I(状压DP)
    HDU 3853LOOPS(简单概率DP)
    UVA 11983 Weird Advertisement(线段树求矩形并的面积)
    POJ 2886Who Gets the Most Candies?(线段树)
    POJ 2828Buy Tickets
    HDU 1394Minimum Inversion Number(线段树)
  • 原文地址:https://www.cnblogs.com/shenben/p/6369476.html
Copyright © 2011-2022 走看看