好多人都说指针很难,其实指针并不难,你不是不懂指针,你是不懂内存管理,搞懂内存管理,指针就是纸老虎
内存物理上的实现我们不用关心,这是硬件工程师需要关心的问题,作为软件工程师,我们只需要了解内存的抽象逻辑即可
在学习内存管理之前,我们先来复习一下计算机的存储单位
计算机的存储单位
在计算机中,一个二进制位是最小的存储单位,只有0和1两种状态,我们称之为位(bit)
8个位组成一个字节(Byte),继续往上,使用1024为进制单位,即就是我们常说的1024Byte=1KB,后面还有1024KB=1MB,1024MB=1GB等等。严格来说,B才是他们的单位,而K、M、G不是单位,它们只代表数量,实际上,KB只是KByte的缩写。1KB严格说其含义是1K个Byte,也就是1024个Byte,其他同理。
这里提一句题外话,我们在办理宽带时,明明是100M的网线,为毛下载速度只有10M/S?严格说,宽带的100M指的是100Mbps,和上面的一样,Mbps不是单位,bps才是单位,bps的含义是每秒传输的二进制位数,而100Mbps指的是每秒传输100M个二进制位,也就是100x1024x1024个bit。而我们下载时显示的速度是以字节为单位的,是宽带的数据除以8之后的结果,这就是100M网线下载速度只有10M/S的原因。
内存的逻辑结构
先看张图
在逻辑上,我们把内存分成一个一个的小格子,每个小格子就是一个字节,而每个字节又有8个位。同时为每个小格子编上编号,而这个编号就是我们常说的内存地址。我们常说的计算机有4G内存指的就是计算机有4x1024x1024x1024个存储单元。
为什么32位系统只支持4G内存
关于CPU的体系结构不是本文的重点,不作详细说明,这里只是简单提一下。CPU在读取内存数据的时候,需要通过地址总线进行寻址,而32位的CPU其地址总线也是32位的,也就是说,CPU一次读取的地址最多是32位的,而一个32位的地址又能代表多大内存呢?这里的32位指的是有32个二进制位