如何 提高C++ 多维数组访问速度
rt,假设数组维度为4,A*B*C*D,大小 512*512*100*120(即A=521,B=512,C=100, D=120),在堆上分配内存,如果分配和管理这部分内存能够使得,按不同维度来访问数组都能获得较快的访问速度?比如说,按照如下方式分配内存:
int ****A;
A = new int ***[512];
for(int i = 0; i < 512; i++)
{
A[i] = new int**[512];
}
for(int i = 0; i < 512; i++)
for(int j = 0; j < 512; j++)
{
A[i][j] = new int*[100];
}
for(int i = 0; i < 512; i++)
for(int j = 0; j < 512; j++)
for(int k = 0; k < 100; k++)
{
A[i][j][k] = new int[120];
}
按照维度D访问数组,由于最后一个维度,所以访问的内存地址是连续的,缓存命中率较高,但是按照维度C,访问数组,由于内存地址的不连续,会导致内存颠簸,有什么方式可以提高多维数组的访问速度?可以使用不同的内存分配方式,主要是需要按照不同维度访问数组都可以获得较高的访问速度速度?
假如多维度A,C访问,遍历A[i][0][j][0],这样访问的内存跳跃较大,是不连续的,如果把数组的维度做一下调整变成B*D*A*C,这样遍历A[0][0][i][j],访问的速度会有提升,有没有好的办法对数组的维度做出调整?
无需调整。
不要低估CPU内部两级Cache的智商!