zoukankan      html  css  js  c++  java
  • 编译-O 选项对性能提升作用

    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选项的风险,看来通过分析程序瓶颈或部署做性能提升也是必经之路。

  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/pigerhan/p/3526889.html
Copyright © 2011-2022 走看看