读书人

_int64寻址有关问题

发布时间: 2012-03-04 11:13:33 作者: rapoo

_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内部操作要慢

读书人网 >软件架构设计

热点推荐