GCC -O 选项
这个选项控制所有的优化等级. 使用优化选项会使编译过程耗费更多的时间, 并且占用更多的内存, 尤其是在提高优化等级的时候.
-O 设置一共有五种:-O0,-O1,-O2,-O3 和 - Os.
让我们来逐一考察各个优化等级:
-O0: 这个等级 (字母 "O" 后面跟个零) 关闭所有优化选项, 也是 CFLAGS 或 CXXFLAGS 中没有设置 - O 等级时的默认等级. 这样就不会优化代码, 这通常不是我们想要的.
-O1: 这是最基本的优化等级. 编译器会在不花费太多编译时间的同时试图生成更快更小的代码. 这些优化是非常基础的, 但一般这些任务肯定能顺利完成.
-O2:-O1 的进阶. 这是推荐的优化等级, 除非你有特殊的需求.-O2 会比 - O1 启用多一些标记. 设置了 - O2 后, 编译器会试图提高代码性能而不会增大体积和大量占用的编译时间.
-O3: 这是最高最危险的优化等级. 用这个选项会延长编译代码的时间, 并且在使用 gcc4.x 的系统里不应全局启用. 自从 3.x 版本以来 gcc 的行为已经有了极大地改变. 在 3.x,-O3 生成的代码也只是比 - O2 快一点点而已, 而 gcc4.x 中还未必更快. 用 - O3 来编译所有的软件包将产生更大体积更耗内存的二进制文件, 大大增加编译失败的机会或不可预知的程序行为(包括错误). 这样做将得不偿失, 记住过犹不及. 在 gcc 4.x. 中使用 - O3 是不推荐的.
-Os: 这个等级用来优化代码尺寸. 其中启用了 - O2 中不会增加磁盘空间占用的代码生成选项. 这对于磁盘空间极其紧张或者 CPU 缓存较小的机器非常有用. 但也可能产生些许问题, 因此软件树中的大部分 ebuild 都过滤掉这个等级的优化. 使用 - Os 是不推荐的.
-O2 是推荐的优化等级, 也是多数程序使用的优化等级. 以前一致以为 - O 选项是锦上添花的东西, 认为一般只可以提升 10%-20, 不会对性能明显的提升. 最近测试一个程序, 发现不加 - O2 选项的时候, 进行一轮计算二百多 ms, 加了以后减少到三十多 ms, 感概编译优化既然可以对性能由如此大的提升. 另外曾经一个对于性能要求比较高的程序, 我们曾经使用了 O3 选项, 对于一些长尾查询性能得到了较大提升, 但鉴于上面提到的 O3 选项的风险, 看来通过分析程序瓶颈或部署做性能提升也是必经之路.
来源: http://www.bubuko.com/infodetail-3280728.html