计算机如何直接访问RAM中的内存位置?

计算机如何直接访问RAM中的内存位置?,ram,Ram,如果我们想访问数组的元素i,我们会这样做:i*(每个元素的大小)+数组的起始地址=我们需要访问的元素的内存位置。然后,CPU直接访问RAM中的该位置。这是怎么发生的 假设我要定位的内存地址是5064,我设想CPU必须从1到5064依次搜索,当它到达5064时,返回内存地址中的项。但RAM显然不是这样工作的,因为它本身不是直接访问 在硬件层,它使用类似于:线路解码器的电路来实现内存单元在RAM中的即时定位 上述电路可以使用三位(A0、A1、A2)表示8个存储单元。每个位有两种状态0或1,例如10

如果我们想访问数组的元素i,我们会这样做:i*(每个元素的大小)+数组的起始地址=我们需要访问的元素的内存位置。然后,CPU直接访问RAM中的该位置。这是怎么发生的


假设我要定位的内存地址是5064,我设想CPU必须从1到5064依次搜索,当它到达5064时,返回内存地址中的项。但RAM显然不是这样工作的,因为它本身不是直接访问

在硬件层,它使用类似于:线路解码器的电路来实现内存单元在RAM中的即时定位

上述电路可以使用三位(A0、A1、A2)表示8个存储单元。每个位有两种状态0或1,例如101将激活A0、A2。相应的输出将被选择,在这种情况下,比如说Z2。所有输出Z0、Z1。。Z7可以是连接到存储单元的电路。这样,存储器地址的选择是恒定的操作


参考资料:

一个程序有一系列地址可供使用。在此范围内,每个项目都有自己的地址。当程序想要访问某个项时,它只加载该项的内存地址,然后对其进行读/写操作。然后,您必须考虑堆栈、特定项目所在的不同范围,等等。但是不,程序不必从地址
0x0
计数到访问它的地址。如果您真的想了解程序如何访问内存地址并对其进行操作,那么我建议您研究ASM(汇编语言)@Tau我真的在问硬件级别,即cpu如何访问RAM的内存地址,因为它知道要访问哪个地址。想象一下在图书馆里搜索一本书。您知道要查找的书号,因此可以在每个书架上都有书号标签的书架上进行搜索。访问RAM的方式是否类似?嗯,不。程序已经知道所有的东西在哪里。如果它想在获取值,比如地址
0x00B38FD2
,那么它可以直接转到该地址并从中检索值(减去一些其他基本机制,例如“此程序可以访问该地址吗?”)。想象一下,这就像看着一个颜色各异的货架(就像你在家得宝看到的那样)。如果你想得到灰色的颜色,你可以直接把它取出来。字母RAM代表“随机存取存储器”。您所描述的是顺序存取存储器(如磁带机)。