首页 > 解决方案 > 一维数组对二维数组的大小影响

问题描述

以下声明大型数组的方式之间是否存在性能或大小差异 -

int a[4000][4000]int a[4000 * 4000]?如果可能,我们应该更喜欢其中一个吗?

标签: c++

解决方案


内存布局差异为零。

访问速度应该没有差别,但是需要测量才能确定。

一维阵列更加通用。如果您想创建一个可以接受不同大小数组的函数,那么您可以简单地使用 1D 数组void foo(int *arr, std::size_t w, std::size_t h)。但是对于 2D 数组,没有好的解决方案。即使它们的内存布局相同,尝试将 2D 数组传递给这样的函数也会导致 UB,因为标准是这样说的。

如果您稍后决定要在堆上分配数组,则使用一维数组进行转换会更容易,因为您可以保持相同的[]语法。对于二维数组,您要么必须使用指向数组的指针数组(效率较低),要么编写一个包装一维数组和重载的类operator[](这是正确的做法,但需要时间)。


推荐阅读