seegongsik
结构

内存地址 怎么工作

上一课说过,把大量记忆小格集合起来就是内存。可是在那么多小格里,怎样一下子找到你想要的那一格呢?

01

格子太多就找不到

记忆小格多达几十亿个。
那么在这么多小格里,“刚才存的那个值”在哪一格,怎么再把它找出来呢?
这些小格既没有名字,长得也一模一样。

每一格都长得一样,没办法单独挑出某一格。

想象一个图书馆,几万本书没有编号,乱七八糟地插在书架上。
想找到要的那本书,几乎是不可能的。
内存也有同样的问题,所以需要一个解决办法。

02

给每一格都编上号

解决办法和游泳馆的储物柜一样。
长得一样的储物柜上都贴着编号:0号、1号、2号……
内存也是这样,给每一格按顺序编号。

0号
72
1号
101
2号
108
3号
108
4号
111

上面是格子的编号(地址),下面是格子里存的值。

这个编号叫作地址。
就像每户人家都有地址,信件才能准确送到,每一格都有地址,就能准确找到想要的那一格。

03

报出地址,就去那一格

有了地址,找东西只要一瞬间。
说一声“把3号格的值拿来”,内存就会直接去3号格,把里面的值取出来。
哪怕有几十亿格,只要知道编号,一步就能到。
在下面输入地址再按“读取”,就会显示那一格的值。

0号
72
1号
101
2号
108
3号
108
4号
111
5号
0
6号
0
7号
0
输入地址,按读取

输入地址,就去那一格。

凭一个编号就能直接到达想要的格子,这就是内存快的秘诀。
它不从头一个个数,而是按地址直接指过去。

04

往想要的格子里存值

不只是能取出来。
说一声“把这个值放进5号格”,值就存进了那一格。
读取就是按地址取出,写入就是按地址放进。
这两件事就是内存所做的全部工作。

0号
72
1号
101
2号
108
3号
108
4号
111
5号
0
6号
0
7号
0
输入地址和值,按写入

选好地址,把值放进去。

按地址读,按地址写,很简单吧。
可这两个简单的动作,正是所有程序的基础。
变量也好,照片也好,不管什么,最后都是这样按地址进进出出。

05

CPU按地址提出请求

现在来看整体。
负责计算的CPU需要一个值时,就按地址向内存要。
比如:“把3号的值给我,这个结果放进7号。”
CPU和内存就是这样互相传递地址,把工作一步步做下去。

CPU计算
给我3号→←值给你
内存(编了号的格子)

按地址互相传递。

到这里,我们把计算机这副“身体”的基础转了一圈。
从0和1出发,一直走到计算、记忆,再到按地址找到格子。
从下一课开始,我们来看这些零件怎样听从真正的指令。

一句话总结给数不清的、长得一样的小格像储物柜那样编上号,这就是地址。按地址读、按地址写这两个简单的动作,是所有程序的基础。
← 结构
如果有帮助,请支持我们