c++ - 多维数组的目的是什么?

标签 c++ arrays 2d

我有一些关于多维数组的问题。我了解如何为它们分配内存,但我不明白为什么需要它们(除了使事情更具可读性)。

[]数组的运算符重载了,对吗?那么,为什么不能通过 1dArray[i*nInRow][offset] 分配单个内存块并授予访问权限? ?

通过使用多维数组是否可以进一步提高性能?另外,当为二维数组动态分配内存时,它们是存储在连续的位置,还是分散在堆周围?当请求数据时,我可以假设所有内容都是作为一个 block 从内存中提取的吗?

我看到的大部分资料都只是解释了语法。任何答案或建议阅读都会很棒。

最佳答案

The [] operator for the array is overloaded, right? So, why can't a single block of memory be allocated and access be granted by, 1dArray[i*nInRow][offset]?

可以,事实上,在一般情况下我会推荐这样做。

Are there further performance gains by using an array in multiple dimensions?

不是真的。根据您的布局,您可以优化缓存命中,但对于扁平化的一维数组来说,情况完全相同。两者之间的内存布局(通常)完全相同。唯一的区别是数组的语义类型以及您现在必须自己实现 2D 元素查找的事实。

Also, when memory is dynamically allocated for a 2d array, are they stored in contiguous locations, or are they scattered around the heap? When the data is requested, can I assume that everything is pulled from memory as a block?

数组总是连续的。

尽管您实际上分配的是二维数组,但您应该小心。有些人编写 int** ptr = new int*[2] 然后手动分配每个“子数组”并认为他们有一个二维数组。他们不。它们有一个指针数组,就是你得到“分散”布局的时候。您的二维数组是 int (*ptr)[3] = new int[2][3];

关于c++ - 多维数组的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273928/

相关文章:

c++ - opengl 台球数组

c++ - SSE 内在函数中的 if/else 语句

java - 计算 "Flower Objects"数组中出现的次数

javascript - 通过 _id 匹配并提取两个对象数组之间的元素

arrays - AngularJs ng-repeat 表中的二维数组,每个子数组一列

c++ - C++程序打印到哪里?

c++ - 将左 const 添加到指针数组

java - 将新数组条目与其所有祖先进行比较

javascript - 从向量和内部 Angular 找到矩形的边缘

3d - 将 2D 屏幕坐标取消投影到 3D 坐标