c++ - 多维数组与平面数组 - 性能比较

标签 c++ c arrays performance

使用以下方法之一时是否存在性能问题?哪个更快(如果有的话)?如果有性能测试就好了。

多维数组:

// 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/

相关文章:

c++ - 如何打印出C中变量的内存内容?

javascript - 带键的数组对象不好吗? (混合关联数组样式)

java - 如何在 Java 中将字符串评估为数组?

java - 递归地打印出数组中等于给定总和的所有子集

php - 内存是否加密?

C++ : Should we init class from parent or call directly class?

c++ - 在 C++ 中拆分 `char[]`

c - 为什么4.7在c中是4.6999999

c++ - 成对数组的空间复杂度

有条件的跳跃或移动取决于未初始化的值