我一直在想办法重写下面的代码以提高数组中的缓存性能(通过减少缓存中的未命中)。
我知道数组是逐行(顺序)存储在内存中的,所以 ary[0][0], ary[0][1], ary[0][2],....ary [1][0], ary[1][1], ary[1][2]... ary[50][0], ary[50][1]...ary[50][50] .但是,我不确定如何使用此信息来帮助我弄清楚如何修改循环以提高缓存性能。
for (c = 0; c < 50; c++)
for (d = 0; d < 50; d++)
ary[d][c] = ary[d][c] + 1;
最佳答案
如果你想一次访问一行的所有单元格,只需反转两个循环:
for (d = 0; d < 50; d++)
for (c = 0; c < 50; c++)
ary[d][c] = ary[d][c] + 1;
甚至
for (d = 0; d < 50; d++)
int[] array = ary[d];
for (c = 0; c < 50; c++)
array[c] = array[c] + 1;
但我怀疑它有任何重大影响,甚至根本没有任何影响,尤其是在如此小的阵列上。使您的代码简单易读。不要预先优化。
关于java - 在遍历简单的二维数组时提高缓存性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593453/