使用以下方法之一时是否存在性能问题?哪个更快(如果有的话)?如果有性能测试就好了。
多维数组:
// Using multidimmentional array:
int ****multidim_arr;
// ... initialization, etc. ...
int val = multidim_arr[a][b][c][d];
平面阵列:
// Using flat array (or single array)
int *flat_arr;
// ... initialization, etc. ...
int val2 = flat_arr[a * a_lvl + b * b_lvl + c * c_lvl + d];
更新:
数组有固定的大小,但内存是由 malloc() 函数分配的,因为在程序运行时大小是已知的。
最佳答案
与所有性能问题一样,配置文件和查看。但是平面阵列很可能会更快。那是因为您没有将多维数组与平面数组进行比较——您是将一个指针数组与一个指向...的指针数组与一个具有平面数组的数组进行比较。
多维数组将是 int multidim_array[dim1][dim2][dim3][dim4]
。并且可以预期其具有与平面阵列相同的速度。那是因为它在内存中是连续的。
另一方面,你的是基于指针的,所以每个切片驻留在不同的内存位置,这意味着额外的获取、缓存未命中等。这几乎肯定会更慢。
关于c++ - 多维数组与平面数组 - 性能比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19973361/