C++ 为什么我看到这些函数之间存在如此巨大的性能差异?

C++ 为什么我看到这些函数之间存在如此巨大的性能差异?,c++,optimization,g++,C++,Optimization,G++,用g++编译这个函数是可行的,但速度相当慢 Vo.RoTa(双PSIR、双TeTAR、双PHIR、双席、双彝、双子、双*XF、双*YF、双*ZF){ *xf=xi*cos(phir)*cos(psir)+yi*(-sin(phir)*cos(thetar)*cos(psir)+sin(thetar)*sin(psir))+zi*(sin(phir)*sin sin thetar)*cos(psir)+cos(thetar sin psir)); *yf=xi*sin(phir)+yi*cos(

用g++编译这个函数是可行的,但速度相当慢

<代码> Vo.RoTa(双PSIR、双TeTAR、双PHIR、双席、双彝、双子、双*XF、双*YF、双*ZF){ *xf=xi*cos(phir)*cos(psir)+yi*(-sin(phir)*cos(thetar)*cos(psir)+sin(thetar)*sin(psir))+zi*(sin(phir)*sin sin thetar)*cos(psir)+cos(thetar sin psir)); *yf=xi*sin(phir)+yi*cos(phir)*cos(thetar)-zi*cos(phir)*sin(thetar); *zf=-xi*cos(phir)*sin(psir)+yi*(sin(thetar)*cos(psir)+cos(thetar)*sin(phir)*sin(psir))+zi*(cos(thetar)*cos(psir)-sin(thetar)*sin sin psir); 返回; } 如果我计算一次中间值,然后调用它们,我的模拟运行得更快

<代码> Vo.RoTa(双PSIR、双TeTAR、双PHIR、双席、双彝、双子、双*XF、双*YF、双*ZF){ 双余弦=cos(phir); 双sinf=sin(phir); 双cosp=cos(psir); 双sinp=sin(psir); 双倍成本=成本成本(θ); 双sint=sin(θ); *xf=xi*cosf*cosp+yi*(-sinf*cost*cosp+sint*sinp)+zi*(sinf*sint*cosp+cost*sinp); *yf=xi*sinf+yi*cosf*成本zi*cosf*sint; *zf=-xi*cosf*sinp+yi*(sint*cosp+成本*sinf*sinp)+zi*(成本*cosp sint*sinf*sinp); 返回; } 为什么g++不为我做这个优化呢?有没有一种方法可以让我更有效地做到这一点


谢谢

我已经用
gcc4.7.2
-O3
编译了您的代码。在这两种情况下,生成的
x86_64
程序集几乎相同

然后,我通过调用100000000次对每个函数进行了基准测试

第一个版本是:

real    0m0.216s
user    0m0.213s
sys     0m0.002s
第二次会议采取了:

real    0m0.216s
user    0m0.212s
sys     0m0.002s

得出自己的结论。

您设置了最大优化级别了吗?尝试使用#include而不是#include,并使用std名称空间调用函数,例如std::cos,etc@GearoidMurphy-我无法想象这有什么关系,但我思想开放。你见过这样的差别吗?我怀疑编译器没有利用更简洁的C++函数签名、const参数等等,但是,看起来NPE的优化解决方案有点零点0.1s的差异吗?对于一台计算机来说,这是永恒的太棒了,谢谢@NPE!我正在努力学习更多,但我的谷歌浏览器很弱。-O3标志的作用是什么?我知道这是优化,但为什么是3?是否存在使用其他参数的稳定性/性能原因?@Mengersbine: