内存的本质
内存的存储结构
内存存储结构本质上就好比我们日常生活中的储物柜,它是由无数个存储单元构成,而存储单元存储的元素只能是0或者1,也就是我们常说的二进制。
基于bit存储数据
仅仅用几个0或者1很难抽象现实生活中的各种数据,假如我们将8个存储单元看作一个整体,8个存储单元组成的二进制数组就有256个变化,这样一来就可以表示大部分数据了。
而8个存储单元即8bit,也就是我们常说的一个字节,用数学的方式来表示就是:
1 byte=8 bit
基于字节得到地址
尽管用字节增加了可变的范围,但是面对下面这些情况我们数据表示还是很无力:
- 1000本图书的编号。
- 电话号码
- 更大的整数。
所以我们需要用更多的存储单元来表示,因为上面有了字节这个单元,我们不妨将字节对应的存储单元看作整体,用多个字节组成更大的单位。例如我们就用4个字节表示整型int,32bit即可表示4294967296种组合变化,可表示的数据范围一下就增多了。
同样的道理,我们也可以用更多的字节组成更多的类型,例如double、long类型等。
变量
有个存储单元我们就能存储数据了,假如我们把自己看作是内存,该内存只有8个字节,如下图所示:
我们希望在地址6,也就是倒数第二个位置写入1,对应的CPU操作指令如下,可以看到数值1前面我们加个了$符号,用于表示数值,而不加符号的6则表示地址6。
# 将1这个值写入地址6位置 store $1 6
同理对应的读取一个字节的指令则是
load r1 6
如果为了操作变量而每次都去记录和操作地址就很不方便了,高级语言为了屏蔽这一点就用到了变量,例如:将上面的地址6用a来表示。
于是,后续我们要操作地址6的字节时,例如将地址6的值设置为2,我们只需用:
a=2
可以看到通过高级语言,我们只需对变量赋值即可完成底层各种操作地址的读写指令
指针
引用
参考文献
计算机底层的秘密:https://book.douban.com/subject/36370606/