两个函数的performance问题,大家进来讨论下
以下两个程序哪个的performance高,为什么?
a) extern int foo(void);
int main()
{
int i;
for(i=0;i <10000;i++) foo();
return i;
}
b) extern int foo(void); int i;
int main()
{
for(i=0;i <10000;i++) foo();
return i;
}
[解决办法]
a要调整sp,至少多2个指令,如果a的i不被优化掉,那么在大多数的CPU体系下a比b要慢,如果i被优化掉那么这个问题本身就失去了意义,
另外需要考虑的问题是CPU的pipeline,使用stack的i,会使取值在stack和code区间不停的切换,对于只有一道pipeline的cpu,a必然频繁产生cache的mis-catch,而对于b,在某些体系下,i可以保存在code的附件,会比a有优势。
总之,平均起来,b比a快了一点点。