Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 在没有数组迭代的情况下,如何定位数组元素?_Memory_Microcoding - Fatal编程技术网

Memory 在没有数组迭代的情况下,如何定位数组元素?

Memory 在没有数组迭代的情况下,如何定位数组元素?,memory,microcoding,Memory,Microcoding,据说,在编程语言中,数组元素访问速度很快,知道元素的数字索引。我认为这是因为计算机内存有点像一个数组,每个内存插槽都有一个数字地址。因此,知道了内存地址,我们可以直接访问该地址并访问存储在那里的值 如何快速访问该内存位置?这是在微码级别完成的吗?局部变量实际上引用数组中第一个元素的内存位置。数组中的元素具有固定大小,例如每个整数有4个字节,并按顺序存储在连续的内存块中。元素的内存位置的计算是第一个元素的内存位置+单个元素的位大小*一维数组元素的索引。请注意,计算中使用的索引是基于零的,这就是大多

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


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

局部变量实际上引用数组中第一个元素的内存位置。数组中的元素具有固定大小,例如每个整数有4个字节,并按顺序存储在连续的内存块中。元素的内存位置的计算是第一个元素的内存位置+单个元素的位大小*一维数组元素的索引。请注意,计算中使用的索引是基于零的,这就是大多数语言对数组使用基于零的索引的原因。数组的元素实际上可能是对对象的引用,以保持元素大小不变,而不是对象本身,对象本身的大小可能是可变的。 多维数组的额外说明:多维数组中的元素位置可以使用元素[0][0]的位置+单个元素的大小*第一维度的索引+第二维度的索引*第一维度的长度+…+来计算第n维索引*第n-1维长度*..*主柱系统中第一个尺寸的长度。有两种系统,列主系统和行主系统。这个数学对于计算机来说仍然相当简单,尽管这里看起来很复杂。多维数组也可以实现为数组数组,这样会稍微慢一些,内存效率也会低一些。 越界检查:元素位置的计算不考虑索引大于数组长度,这可能导致访问数组外部的内存位置。C语言不能阻止这一点。Java将抛出OutOfBoundsException,但是由于执行了一项检查,访问数组的成本会稍微高一些。越界检查是特定于语言的,如果已经实现的话