64,701
社区成员
发帖
与我相关
我的任务
分享
int *pBuf = new int[512*512*120*100];
int **p1 = new int*[512*512*120];
int ***p2 = new int**[512*512];
int ****A = new int***[512];
for(int i = 0; i<100; i++)
p1[i] = pBuf + 512*512*120*i;
for(int i = 0; i< 120;i++)
p2[i]=p1+512*512*i;
for(int i =0; i<512;i++)
A[i]=p2+512*i;
分配的地址是连续的,假如,程序在某段时间内,频繁访问维度AC,比如遍历A[i][0][j][0],遍历i,j时,访问的内存不是连续的,这个时候有没有什么办法能够提高访问速度?
之前,我想得是在访问维度AC之前,可以将数组维度变换为B*D*A*C,然后对维度A*C进行访问,但是没有想出什么好的办法对数组维度进行变换,有没有什么好的办法处理这种情况?ARR[i*512*100*120+j*100*120+k*120+l]='V';//ARR[i][j][k][l]='V'
int *ARR=new int[512*512*100*120];
int *A,*B,*C,*D;
for (A=ARR;A<ARR+512*512*100*120;A+=512*100*120) A[0]='A';//ARR[0..511][0 ][0 ][0 ]='A'
for (B=ARR;B<ARR+ 1*512*100*120;B+= 100*120) B[0]='B';//ARR[0 ][0..511][0 ][0 ]='B'
for (C=ARR;C<ARR+ 1*100*120;C+= 1*120) C[0]='C';//ARR[0 ][0 ][0.99][0 ]='C'
for (D=ARR;D<ARR+ 1*120;D+= 1) D[0]='D';//ARR[0 ][0 ][0 ][0..119]='D'
int *ARR=new int[512*512*100*120];
int *A,*B,*C,*D;
for (A=ARR;A<A+512*512*100*120;A+=512*100*120) A[0]='A';
for (B=ARR;B<B+ 1*512*100*120;B+= 100*120) B[0]='B';
for (C=ARR;C<C+ 1*100*120;C+= 1*120) C[0]='C';
for (D=ARR;D<D+ 1*120;D+= 1) D[0]='D';