【问题标题】:Rectangular array physical in memory order按内存顺序物理排列的矩形阵列
【发布时间】:2012-05-21 06:33:00
【问题描述】:

在 C 中,在数组中说 A[2][3] 最右边的索引更改导致最小的内存地址偏移,即元素位于内存中为 A[0][0], A[0][1]...

.NET 中的矩形数组也一样吗?如果我们有,说数组a[2, 3] 是位于内存中的元素a[0, 0], a[0, 1]...

【问题讨论】:

  • 您并没有完全比较可比性。您的 C 数组并不是真正的二维数组,而是数组数组。你也可以在 C# 中做同样的事情:例如int[][],不是int[,]
  • @svick 你完全错了。
  • 不,这就是二维数组在 C 中的实现方式。它们只是一个一维数组,其元素本身就是一维数组。
  • @CodyGray 除了形式上的定义和概念外,它们直接类似于 C# 中的矩形数组。而 C# 中的 int[][] 则完全不同,它类似于 C 中的 *int[]

标签: .net arrays memory multidimensional-array


【解决方案1】:

CLI specification,第 8.9.1 节指出:

数组元素应在数组对象中以行为主 顺序(即与最右边的数组关联的元素 尺寸应从最低到最高连续布置 指数)。为每个数组元素分配的实际存储空间可以 包括特定于平台的填充。

所以答案是肯定的——你会首先遇到第一行的所有元素,然后是第二行的所有元素,等等(正如规范所说,这称为 行主要顺序 )。

【讨论】:

  • 谢谢,就是懒得找自己! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
相关资源
最近更新 更多