13.1.什么是内存
(1)从硬件角度:内存实际上是电脑上的一个配件,也叫内存条。根据不同的硬件实现原理可以把内存分成SRAM和DRAM。DRAM又有很多代,譬如最早的SDRAM,后来DDR1、DDR2…、LPDDR等。
(2)从逻辑角度:内存可以随机访问(俺们可以通过某个随机的内存地址就可直接访问该内存地址);并且可以对内存进行读写操作(在逻辑上也可设置其为只读或只写)。内存在编程中天然是用来存放变量的(正是因为有了内存,所以C语言才能定义变量,C语言中的一个变量实际就对应内存中的一个单元)。
13.2.内存的编程模型
(1)从逻辑角度来讲,内存实际上是由无限多个内存单元格组成的,每个单元格有一个固定的地址叫内存地址,该内存地址和该内存单元格唯一对应并且永久绑定。
(2)以大楼来类比内存:逻辑上的内存对应于一栋无限大的大楼;内存的单元格对应大楼中的一个个小房间;每个内存单元格的地址对应每个小房间的房间号;内存中存储的内容对应住在房间中的人。
(3)逻辑上来说,内存可以无限大(因为数学上编号永远可以增加,无尽头)。但现实中的内存大小是有限制的,譬如32位系统下可使用的最大内存就限制为4G。
13.3.位和字节及字和半字
(1)衡量内存单元的大小的单位:位(1bit)、字节(8bit)、半字(一般是16bit)、字(一般是32bit)。
(2)在所有的计算机、所有的机器中(不管是32位系统还是16位系统还是以后的64位系统),位永远都是1bit,字节永远都是8bit。
(3)历史上曾经出现过16位系统、32位系统、64位系统三种,而且操作系统还有windows、linux、iOS等很多,所以很多的概念在历史上曾经被混乱的定义过。
(4)建议对字、半字、双字这些概念不要详细区分,只要知道这些单位具体有多少位是依赖于平台的。实际工作中在每种平台上先去搞清楚这个平台的定义(字是多少位,半字永远是字的一半,双字永远是字的2倍大小)。
(5)编程时一般根本用不到字这个概念,那我们区分这个概念主要是因为有些文档中会用到这些概念,如果不加区别可能会造成你对程序的误解。在linux+ARM这个软硬件平台上,字是3