什么是内存?(硬件和逻辑)
- 从硬件角度,内存实际上是电脑上的一个配件(一般叫内存条)。根据内存内部结构的不同,将内存可以分为SRAM和DRAM(DRAM又有好多代,例如最早的SDRAM,后来的DDR1,、DDR2···、LPDDR)。SRAM无需初始化,DRAM需要初始化。
- 从逻辑角度:内存是这样一个东西,它可以随机访问(随机给个地址都能够访问,并且可以读写)。在编程中,内存的功能就是存放变量(因为有了内存,所以C语言才能定义变量,C语言中的一个变量对于内存中的一个单元)。
内存的逻辑抽象图(内存的逻辑模型)
- 从逻辑的角度,内存实际上可以看做无数个内存单元格组成,每个单元格有个固定的地址,称为内存地址。内存地址和单元格唯一对应而且永久绑定。
- 将大楼来类比内存是合适的。逻辑上的内存就好像是一栋无限大的大楼,内存的单元格就好像大楼中的一个个小房间。每个内存单元格的地址就好像每个房间的房间号。内存中的保存的数据就像是房间内部的人。
- 逻辑上来说,内存可以无限大。但是实际上,内存空间都有限制。例如32位系统(32根数据线,32根地址线),内存限制4G。进一步,实际上也可以用小于或者等于4G的内存容量。
字节
内存单元的大小单位有4个:位(1bit),字节(8bit),半字(一般是16bit),字(一般是32bit)。要注意任何系统中,位永远都是1bit而字节永远都是8bit。
字,半字,双字的概念
- 不一样的平台可能字,半字,双字定义不一样。
- 建议大家对字,半字,双字不要详细区分,只要知道这些单位具体有多少为是依赖于平台的。
- 编程上,很少用到字的概念。那我们区分该概念主要是因为有些文档会用到这些概念,如果不加区分会导致对程序的错误的理解。
内存位宽
- 从硬件角度来讲,硬件内存的实现本身就是有宽度的,也就是说有些内存条就是8位的,有些就是16位的。需要注意的是,内存芯片之间是可以并联的,通过并联后,即使是8位的内存芯片,也可以做出16位,32位的硬件内存。
- 从逻辑角度来讲:内存位宽在逻辑上是任意的,甚至逻辑上存在内存位宽是24位的内存(但是实际硬件不存在,也没有实际意义。虽然用户能够随意操作,但是需要硬件去执行,所以实际上的很多操作都受限于硬件的特性)。从逻辑角度来说,直接操作即可,位宽不够成影响。