【问题标题】:Why does RAM access any memory address in O(1) time?为什么 RAM 在 O(1) 时间内访问任何内存地址?
【发布时间】:2019-01-19 15:12:34
【问题描述】:

当我们处理数组时,例如,分配 a[10000] = 3,它所做的就是首先将 10000 * sizeof(int) 加到 a 的内存地址,然后访问该内存地址。问题是,为什么访问这样的内存地址只需要 O(1) 时间?基本上,随机存取存储器背后的魔力是什么,它需要相同的时间访问地址#1 和地址#1,000,000?

【问题讨论】:

  • 我认为这与 RAM 只是一堆晶体管/电容器而不是磁带有关。电信号的传播速度非常快。
  • 访问(寻址)任意存储单元只需要相同的时间。这是由于技术设计造成的,并且对于不同的存储介质(如磁盘、磁性硬盘驱动器等)有所不同
  • 这对于(基于 SRAM 的)缓存来说或多或少是正确的,因为它是硬件实现的,但对于现代 (D)RAM 则不然,因为它很慢,因此需要大量缓存。然后,内存访问取决于当前在缓存中的内容以及不在缓存中的内容以及您的内存访问模式(

标签: ram


【解决方案1】:

根据定义,随机存取存储器是可以在恒定时间内提供任何地址的内容的存储器。这就是“随机访问”位,它与其他类型的内存有什么区别。

没有魔法;只有 n 个位置,访问内存的人提供了选择其中一个的详细信息。

在大多数实现中,记忆中的每个单词都是相同的电子元件。您只是选择连接到总线的。

【讨论】:

    【解决方案2】:

    例如,分配a[10000] = 3,它的作用是先将10000 * sizeof(int)添加到a的内存地址,然后访问该内存地址。

    完全正确。许多 CPU 有一个单一的寻址模式来访问从基址偏移的数据,其中基址是一个固定数字,偏移量在寄存器中,反之亦然。

    随机存取存储器背后的魔力是什么,它需要相同的时间访问地址 #1 和地址 #1,000,000?

    同样的“魔法”可以让您在固定的时间内添加两个数字,而不管被添加的数字的值如何。换句话说,将11000000 添加到例如2000000000 的基础上并不重要:它需要相同数量的周期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-30
      • 2019-02-19
      • 1970-01-01
      • 2019-01-13
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多