简单总结一下GCC编译优化那些事

启用优化后,gcc会改变程序的结构,让代码变小或者运行得更快。

-O0是不优化。

-O1是在不影响编译速度的情况下,尽量采取一些优化算法。比如通过拷贝传播(使用定义可达性算法)减少拷贝的次数,通过消除死代码降低代码的体积,通过跟踪堆栈,尝试找到合并push和pop的方法。

-O2会牺牲一定的编译速度,除了执行O1的所有编译优化之外,还会采取几乎所有的目标配置支持的优化算法,用来提高目标代码的运行速度。

-O3除了执行O2所有的优化选项之外,一般还会采用很多向量化算法,提高程序的并行度,并利用cache来加快运行速度。比如采用一些启发式算法(麻雀搜索算法,粒子群搜索算法)对函数进行内联。

你可能感兴趣的:(汇编)