我们通常编译-O2因为-O3会"触发微妙的错误".
对于我们的GCC版本,-O3可以实现更积极的内联,这实际上可以揭示其他未被注意到的错误(例如,使用来自将其作为引用参数或对数组进行越界访问的函数的未初始化值).在我看来,这种积极的内联还允许使用更小的函数进行更具表现力的编码方式,并-funswitch-loops有助于在循环中保持变量定义更加局部化.
鉴于我们的代码中的错误比编译器错误更有可能,并且我们使用时-Wall -Wextra没有任何问题我们应该寻找什么样的错误?
如果重要我们使用gcc-4.3.2.编译时间对我们来说不是一个主要问题.
flo*_*olo 10
尺寸.当然,如果尺寸真的很重要(有时就像嵌入式一样),人们会使用-Os.但O3的主要区别在于(从你已经提到的)内联.这可以增加生成的代码大小(但速度更快).也许你想要速度,但不是所有(空间)成本?否则我会发现没有理由不使用O3(除了你知道只在你的O3代码中出现的gcc编译器错误,但只要你没有错误,你就不能在O2重现,我不在乎) .