【问题标题】:How much time does a program take to access RAM?程序访问 RAM 需要多少时间?
【发布时间】:2016-03-22 15:16:30
【问题描述】:

我已经看到了为什么 RAM is accessed in constant 时间 (O(1)) 以及为什么是 accessed in logarithmic time (O(n)) 的解释。坦率地说,这对我来说都没有多大意义。 big-O 符号中的n 是什么?使用 big-O 测量物理设备的运行速度有何意义?我理解在线性时间内访问 RAM 的一个论点是,如果您有一个数组 a,那么第 k 个元素将位于地址 a+k*size_of_type(点是地址可以很容易地计算)。如果你知道你想去loadstore 的地址,这难道不是一个恒定的时间量吗?有人告诉我在 RAM 中查找某些内容(例如数组中的元素)比O(n) 需要更长的时间,因为它需要找到正确的页面。这是错误的,因为分页与硬盘有关,而不是 RAM。

【问题讨论】:

  • “分页与硬盘有关,而不是 RAM。” 远非如此。在嵌入式实现中,当可用 RAM 超过可直接寻址时,可以对 RAM 进行分页。
  • 访问一个数组的一个元素是O(1)。读取 整个 数组是 O(n)。线性时间,不是对数。它不像 O(n) 那样灵活地扩展,处理器缓存和驱逐其他 RAM 页面的需要可能使其非常不规则。但是大哦不担心这个。
  • 在我看来,您不了解大 O 复杂性的概念,我强烈建议您先阅读该内容。您将算法复杂性与硬件实现细节混合在一起。此外,每个现代 CPU 都使用分页和分段来解决内存碎片问题,如果没有其他问题的话。例如,谷歌“TLB”。
  • Big-O 与读取数据所需的时间无关。读取一个字节可能需要一个小时,如果时间相同,则无论数据量(即 RAM 大小)如何,仍然是 O(1)。

标签: memory big-o


【解决方案1】:

我认为这是一个纳秒级的值,比访问磁盘(5 到 80 毫秒)要快得多

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2015-09-27
    • 2011-01-25
    相关资源
    最近更新 更多