0

据说在知道元素的数字索引的编程语言中访问数组元素很快。我认为这是因为计算机内存有点像一个数组,每个内存插槽都有一个数字地址。因此,知道内存地址后,我们可以直接访问该地址并访问存储在那里的值。

如何快速访问该内存位置?这是在微码级别完成的吗?

4

1 回答 1

0

局部变量实际上引用了数组中第一个元素的内存位置。数组中的元素具有固定大小(例如整数每个 4 字节)并按顺序存储在连续的内存块中。元素的内存位置的计算是memory location of first element + (size in bits of single element * index of element)针对一维数组的。请注意,计算中使用的索引是从零开始的,这就是为什么大多数语言对数组使用从零开始的索引。数组的元素实际上可能是对对象的引用以保持元素大小固定,而不是对象本身可能具有可变大小。

多维数组的额外解释:可以使用计算多维数组中的元素位置location of element [0][0] + (size of single element * (index for 1st dimension + (index for 2nd dimension * length of 1st dimension) + ... + (index for nth dimension * length of (n-1)th dimension * ... * length of 1st dimension)))在列主系统中。有两个系统,列专业和行专业。 查看此页面以进行可视化 此数学对于计算机来说仍然相当简单,尽管在这里看起来很复杂。多维数组也可以实现为数组的数组,这会稍微慢一些并且内存效率较低。

越界检查:元素位置的计算没有考虑索引大于数组的长度,这可能导致访问数组之外​​的内存位置。C 语言不会阻止这一点。Java 将抛出 OutOfBoundsException,但由于正在执行检查,访问该数组的成本会稍微高一些。越界检查是特定于语言的,如果它已实现

于 2015-04-24T19:48:42.550 回答