我有两种构造二维数组的方法:
int arr[NUM_ROWS][NUM_COLS];
//...
tmp = arr[i][j]
和扁平化数组
int arr[NUM_ROWS*NUM_COLS];
//...
tmp = arr[i*NuM_COLS+j];
我正在做图像处理,所以即使是访问时间上的一点点改进也是必要的。哪个更快?我在想第一个,因为第二个需要计算,但是第一个需要两个寻址,所以我不确定。
最佳答案
我认为没有任何性能差异。在这两种情况下,系统将分配相同数量的连续内存。对于计算 i*Numcols+j
,您可以为 1D 数组声明进行计算,或者系统将在 2D 情况下进行计算。唯一关心的是易用性。
关于c++ - 二维数组访问时间比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154761/