GCC -O 优化选项说明

编译耗时

编译结果大小(BYTES)

运行耗时

不设置O选项

real 0m20.079s

user 0m18.943s

sys 0m1.030s

1590048

real 0m13.143s

user 0m12.996s

sys 0m0.124s

-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。 

real 0m19.957s

user 0m18.521s

sys 0m1.406s

1590048

real 0m12.816s

user 0m12.661s

sys 0m0.138s

-O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。 

real 0m22.782s

user 0m21.750s

sys 0m0.978s

599306

real 0m5.074s

user 0m4.951s

sys 0m0.115s

 

-O2:-O1的进阶。这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。 

real 0m26.258s

user 0m25.313s

sys 0m0.887s

594456

real 0m4.621s

user 0m4.491s

sys 0m0.123s

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

real 0m29.642s

user 0m28.671s

sys 0m0.852s

659664

real 0m4.669s

user 0m4.521s

sys 0m0.141s

-O4 等价于-O3

-O5 等价于-O3

....

real 0m30.264s

user 0m29.236s

sys 0m0.969s

659664

real 0m4.481s

user 0m4.331s

sys 0m0.144s

 

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

real 0m24.206s

user 0m23.285s

sys 0m0.855s

 

519903

real 0m5.188s

user 0m5.050s

sys 0m0.132s