_int64寻址问题
下面两端代码
1)
_int64 a,b,c,d;
//赋值
for(int i=0;i <0x1000;i++)
for(int j=0;j <0x100;j++)
{
a=(a*b+c)%m;
}
2)
_int64 a[0x100],b,c,d;
//赋值
for(int i=0;i <0x1000;i++)
for(int j=0;j <0x100;j++)
{
a[i+1]=(a[i]*b+c)%m;
}
在release下
1)的运行速度小于1秒
2)的运行速度为24秒
想问一问高手是怎么回事?
个人怀疑32位机在处理64位运算时需要特殊的寻址,这里可能很花时间?请高手指教
[解决办法]
1. a[i]是间接寻址,a是直接寻址,机器指令上前者多出几个周期,可查手册
2. 少量变量在短时间内的频繁数据传递,可以在CPU内完成,变量在寄存器阵列或高速缓存中。大块数据,像a[]在内存中,访问内存比CPU内部操作要慢