熟悉计算机的人都知道,内存是平时接触比较多的一个概念。从硬件上讲,内存是一个物理设备(我记得我10年买计算机的时候当时问老板联想G460电脑的参数时,老板说1G的内存2G的显卡);从功能上讲,内存是一个数据库,程序在执行前都要装载到内存中,才能被中央处理器执行。
我们就以Windows为例,执行安装在硬盘上的某个程序,实际上时候将该程序的指令和数据读入内存,然后供中央处理器执行的过程。
内存是由按照顺序编号的一系列存储单元组成的。在内存中,每一个存储单元都有一个唯一的地址,通过地址可以方便的在内存中存取信息。内存中的数据要靠电源维持,当计算机关闭或者意外断电时,其中的所有的数据永久地消失了。
1.1内存地址
我们可以将内存看成一个个连续的小盒子的集合,为了正确的访问这些小盒子,必须给这些小盒子编号,正如我们平时讲某栋房屋在A小区X楼Y单元Z房间一样,这个A、X、Y、Z等实际上就是该房间的编号,有了这个编号,或者我们通俗的说时“地址“,我们就能从一个城市中的成千上万的几乎一样的房子中找到该房间。
内存地址的引用是同样的道理,为了正确的访问每个存储单元,要对其进行编址,以32位计算机为例,其地址空间是32位,采用32位地址编码,如0X87654321.
内存地址是连续的,相邻的内存单元间的地址差1,可以把内存看成一个平坦连续的一维空间。
1.2 内存中保存的内容
在计算机中,一切信息的保存都是以二进制的数据形式存放的,每一个内存单元的容量是1B,即8bit(即8个二进制)。
中央处理器(CPU)进行的所有的运算都离不开内存。使用过windows系统的读者都应该知道,双击某个可执行程序,CPU会执行它,这实际上是复杂的内存载入的过程。
(1)程序所要进行的操作的对应代码装载在代码区。
(2)全局的静态数据等装载到数据区。
(3)开辟堆栈,供临时变量等使用。
由此可见,内存中的数据是多种多样的,既可以是程序,也可以是数据,都存储在一个个内存的小盒子中,每一个小盒子存储8个二进制数。
1.3 地址就是指针
所谓的指针,指的是”储存的内容就是地址的量“。这概念里有两个要点:
(1)指针是一个量,对应着一块内存区域;
(2)指针存储的信息是某个内存单元的地址。
不明白?打个比方:现实生活中的地址和名片,我们都习惯于把地址印在名片上,这里的名片的作用和地址相仿,存储的都是地址数据。