收货地址是用来定位我们在现实世界中真实住所地理位置的 , 而现实世界中我们所在的城市 , 街道 , 小区 , 房屋都是一砖一瓦 , 一草一木真实存在的 。但收货地址这个概念模型在现实世界中并不真实存在 , 它只是人们提出的一个虚拟概念 , 通过收货地址这个虚拟概念将它和现实世界真实存在的城市 , 小区 , 街道的地理位置一一映射起来 , 这样我们就可以通过这个虚拟概念来找到现实世界中的具体地理位置 。
综上所述 , 收货地址是一个虚拟地址 , 它是人为定义的 , 而我们的城市 , 小区 , 街道是真实存在的 , 他们的地理位置就是物理地址 。

文章插图
比如现在的广东省深圳市在过去叫宝安县 , 河北省的石家庄过去叫常山 , 安徽省的合肥过去叫泸州 。不管是常山也好 , 石家庄也好 , 又或是合肥也好 , 泸州也罢 , 这些都是人为定义的名字而已 , 但是地方还是那个地方 , 它所在的地理位置是不变的 。也就说虚拟地址可以人为的变来变去 , 但是物理地址永远是不变的 。
现在让我们把视角在切换到计算机的世界 , 在计算机的世界里内存地址用来定义数据在内存中的存储位置的 , 内存地址也分为虚拟地址和物理地址 。而虚拟地址也是人为设计的一个概念 , 类比我们现实世界中的收货地址 , 而物理地址则是数据在物理内存中的真实存储位置 , 类比现实世界中的城市 , 街道 , 小区的真实地理位置 。
说了这么多 , 那么到底虚拟内存地址长什么样子呢?
我们还是以日常生活中的收货地址为例做出类比 , 我们都很熟悉收货地址的格式:xx省xx市xx区xx街道xx小区xx室 , 它是按照地区层次递进的 。同样 , 在计算机世界中的虚拟内存地址也有这样的递进关系 。
这里我们以 Intel Core i7 处理器为例 , 64 位虚拟地址的格式为:全局页目录项(9位)+ 上层页目录项(9位)+ 中间页目录项(9位)+ 页内偏移(12位) 。共 48 位组成的虚拟内存地址 。

文章插图
虚拟内存地址中的全局页目录项就类比我们日常生活中收获地址里的省 , 上层页目录项就类比市 , 中间层页目录项类比区县 , 页表项类比街道小区 , 页内偏移类比我们所在的楼栋和几层几号 。
这里大家只需要大体明白虚拟内存地址到底长什么样子 , 它的格式是什么 , 能够和日常生活中的收货地址对比理解起来就可以了 , 至于页目录项 , 页表项以及页内偏移这些计算机世界中的概念 , 大家暂时先不用管 , 后续文章中笔者会慢慢给大家解释清楚 。32 位虚拟地址的格式为:页目录项(10位)+ 页表项(10位) + 页内偏移(12位) 。共 32 位组成的虚拟内存地址 。

文章插图
进程虚拟内存空间中的每一个字节都有与其对应的虚拟内存地址 , 一个虚拟内存地址表示进程虚拟内存空间中的一个特定的字节 。2. 为什么要使用虚拟地址访问内存经过第一小节的介绍 , 我们现在明白了计算机世界中的虚拟内存地址的含义及其展现形式 。那么大家可能会问了 , 既然物理内存地址可以直接定位到数据在内存中的存储位置 , 那为什么我们不直接使用物理内存地址去访问内存而是选择用虚拟内存地址去访问内存呢?
经验总结扩展阅读
- 神话中高要一步一步往上爬是第几集?
- 神话一步一步爬到最高是几集?
- 总以为她会永远陪我一步一步慢慢走是什么歌
- 爱情不会一步到位而是会经过颇多挫折才圆满的星座
- Dubbo 03: 直连式 + 接口工程
- 一篇文章带你了解热门版本控制系统——Git
- 一篇文章带你了解网页框架——Vue简单入门
- 一直在等待爱却不敢主动迈出一步的星座
- 我用canvas带你看一场流星雨
- 一篇文章带你掌握MyBatis简化框架——MyBatisPlus
