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选项不冲突的优化选项,当然就能提供合理的优化水平,同时产生较好的可调试信息和对语言标准的遵循程度。

     

  • 相关阅读:
    tableView的高度问题
    信任机型
    cell 内部 设置width 总不对
    图文混排
    UICollectionview实现自定义cell的移动删除
    ios 各种技术
    打包ane之后在FB上生成ipa的阶段错误
    自动布局出代码植入 的图像化实例
    MapReduce编程实例
    二叉树的遍历(递归遍历、非递归遍历、层序遍历)
  • 原文地址:https://www.cnblogs.com/shenben/p/6369476.html
Copyright © 2011-2022 走看看