我想犯罪。所以这是我的代码:
inline double _cdecl Sin(double Rad)
{
_asm
{
fld QWORD PTR [Rad]
fsin
}
}
我的功能比标准罪更快(比例约为6)。 (可能存在一些问题,但这对我来说已经足够了) 但如果我这样做的话
for(int i = 0; i < 1000000; ++i)
sin(1)
标准罪将以约3的比率更快 如果我愿意的话
for(int i = 0; i < 1000000; ++i)
sin(i)
我的func比率约为3。 这里发生了什么?
答案 0 :(得分:3)
编译器可能知道sin(1)
是一个没有副作用的内在纯函数,因此甚至不会在循环中调用它。所以你可能最终只是为循环本身计时。使用适当的编译器开关检查生成的汇编代码以进行汇编输出。
答案 1 :(得分:0)
编译器不会更好地优化标准sin的第一个版本并检测它是一个常量吗?