Memory 一个程序访问RAM需要多少时间?

Memory 一个程序访问RAM需要多少时间?,memory,big-o,Memory,Big O,我已经看到了关于时间为什么(O(1))和时间为什么(O(n))的解释。坦率地说,这两种说法对我来说都没有多大意义;big-O表示法中的n是什么?使用big-O测量物理设备的运行速度有何意义?我理解,在线性时间内访问RAM的一个参数是,如果您有一个数组a,那么第k个元素将位于地址a+k*size\u类型(点是地址可以很容易地计算)。如果你知道你想从哪里加载或存储的地址,那不是一个固定的时间量吗?从这个意义上说,无论在什么位置,它总是需要相同的时间?有人告诉我在RAM中查找某些东西(比如数组中的元素

我已经看到了关于时间为什么(
O(1)
)和时间为什么(
O(n)
)的解释。坦率地说,这两种说法对我来说都没有多大意义;big-O表示法中的
n
是什么?使用big-O测量物理设备的运行速度有何意义?我理解,在线性时间内访问RAM的一个参数是,如果您有一个数组
a
,那么第k个元素将位于地址
a+k*size\u类型
(点是地址可以很容易地计算)。如果你知道你想从哪里加载
存储
的地址,那不是一个固定的时间量吗?从这个意义上说,无论在什么位置,它总是需要相同的时间?有人告诉我在RAM中查找某些东西(比如数组中的元素)需要比
O(n)
更长的时间,因为它需要找到正确的页面。这是错误的,因为分页与硬盘有关,而不是RAM。

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

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

分页与硬盘有关,而不是RAM。

“分页与硬盘有关。”。在嵌入式实现中,当可用RAM比直接寻址的RAM多时,可以对RAM进行分页。访问数组的一个元素是O(1)。读取整个数组是O(n)。线性时间,而不是对数时间。它的伸缩性不如O(n)那么整齐,处理器缓存和清除其他RAM页面的需要会使它变得非常不规则。但big-Oh并不担心这一点。在我看来,你似乎不理解big-O复杂性的概念,我强烈建议你先读一读。您将算法复杂性与硬件实现细节混为一谈。此外,分页和分段被每一个现代CPU用来解决内存碎片问题,如果没有其他问题的话。例如,google“TLB”。@VioletGiraffe这是我的论点(或者可能是问题),在讨论硬件做某事需要多长时间时,你不能应用big-O。big-O不是关于读取数据需要多长时间。读取一个字节可能需要一个小时,如果时间相同,则不管数据量(即RAM大小)如何,“分页属于硬盘,而不是RAM。”这远远不是真的。在嵌入式实现中,当可用RAM比直接寻址的RAM多时,可以对RAM进行分页。访问数组的一个元素是O(1)。读取整个数组是O(n)。线性时间,而不是对数时间。它的伸缩性不如O(n)那么整齐,处理器缓存和清除其他RAM页面的需要会使它变得非常不规则。但big-Oh并不担心这一点。在我看来,你似乎不理解big-O复杂性的概念,我强烈建议你先读一读。您将算法复杂性与硬件实现细节混为一谈。此外,分页和分段被每一个现代CPU用来解决内存碎片问题,如果没有其他问题的话。例如,google“TLB”。@VioletGiraffe这是我的论点(或者可能是问题),在讨论硬件做某事需要多长时间时,你不能应用big-O。big-O不是关于读取数据需要多长时间。读取一个字节可能需要一个小时,如果无论数据量(即RAM大小)如何,时间都相同,则仍然是O(1)。