为什么内存访问只访问数组的元素一次

时间:2018-04-03 23:42:52

标签: c arrays memory stack memory-address

我正在阅读一本教科书,说在访问数组元素时只需要一次内存访问?当它与汇编语言和堆栈相关联时,我不太明白它,假设我们声明了一个数组

ValidationError

让我们说在堆栈上,第一个数组的元素在堆栈上的地址是8(我知道它应该是十六进制0x ....为了简单起见),所以b的地址是9,c是10,所以变量arr保持值8(第一个元素的地址),而arr本身的地址是100,所以得到数组的第二个元素:

  1. 我们得到arr的持有值为8(这是第一个内存访问,因为我们得到了arr的值,是不是?)
  2. 一旦我们有了地址8,那么我们偏移1得到地址9,然后我们读取这个地址的值(第二次内存访问,为什么教科书说它只需要一次内存访问)?
  3. 当我们声明数组时,值(a,b,c)是先推入堆栈还是点变量arr先被推送到堆栈?

1 个答案:

答案 0 :(得分:0)

是的,你是对的。将有两个内存访问。

但单个内存访问的教科书是什么意思,一旦你有arr的值(数组启动的内存地址),你知道偏移量,你只需要一个内存访问,不像数据结构,如链接列表,你将不得不打三个电话。

对于您的其他问题,首先将为阵列分配内存。一旦此数组的范围开始,就会发生这种情况,当它到达特定命令时,这些值将被复制到分配的地址。