gcc优化标志
选项 作用
-ffloat-store
禁止在CPU的寄存器中保存浮点变量的值.这能把CPU寄存器节省下来留作它用,而且可以防止产生过分精确但不必要的浮点数.
-ffast-math
产生浮点数学优化,这能提高速度但违反了IEEE或ANSI/ISO标准.如果程序不需要严格遵守IEEE规范,可在编译浮点密集型的程序时考虑采用这一标志
-finline-functions 把所有的"简单"函数在调用它们的函数中就地展开.编译器决定了什么是"简单"函数.减少处理器与函数相关的开销是一种基本的优化技术
-funroll-loops 展开所有能在编译时确定重复次数的循环体.展开循环体后每步循环都能省出几条CPU指令,这样大大减少了执行时间
-fomit-frame-pointer 如果函数不需要则丢掉指针,该指针保存在CPU的一个寄存器中.因为去掉了设置,保存和恢复帧指针所必需的指令,所以加快了处理速度.
-fschedule-insns 记录可能暂停的指令,因为它们正在等候的数据不在CPU中
-fschedule-insns2
执行第二次指令重排序(类似于-fschedule-insns)
-fmove-all-movables
把所有出现在循环体内部但稳定不变的计算移出循环体.这从循环体中去除了不必要的操作,加快了循环的整体运算速度.
内联和循环展开技术都能够大大提高程序的执行速度,因为它们都避免了函数调用和变量查找的开销,但付出的代价往往是大大增加了目标或二进制代码的大小.
一般而言,Linux程序员似乎爱用优化选项-O2.