目录 :
1.C/C++程序地址空间回顾(C语言)
2.通过一段代码(引出进程虚拟地址空间)
3.进程虚拟地址空间是什么
--------------------------------------------------------------------------------------------------------------------------------
1.程序地址空间回顾(C语言)
在讲C语言时,我们认为的空间布局图是如下的
既然程序地址空间不是内存,那么是什么呢????
我们先验证一下我们程序地址空间的区域
上面我们也证明了我们的程序地址空间的分布是正确的
---------------------------------------------------------------------------------------------------------------------------
2.通过一段代码(抛出一个问题)
我们先看下面的一段程序,一点问题都没有
那么我们对上面的代码修改一下
地址怎么能没有变化呢??????
如果我们C/C++打印出来的地址是物理内存地址,这种现象肯定是不可能存在的。
所以这里我们使用的地址绝对不是物理地址!!!!!虚拟地址
3.进程虚拟地址空间是什么
我们理解进程地址空间 (以一个故事来理解)
有一个大富翁(银行存有100亿),不过大富翁有3个私生子(私生子就是私下生下来的,彼此之间都互相不认识),每一个私生子都知道他有一个爹是大富翁,所以大富翁对他的3个私生子分别说了,当老爹去世了,就由你来继承老爹的100亿,那么大富翁的每一个私生子都认为自己是100亿的唯一继承者
那么大富翁为什么要给每个人画个饼呢?? 画个饼有什么好处呢
每一个私生子都认为自己能得到100亿,那么每一个私生子都以自己有100以来规划目标
这样子有一个好处,简化私生子处理钱的方式(让私生子认为自己有10个亿,这样子的话他们能以统一的方式(自己有100亿的方式)规划自己的花钱方式)
当一个私生子A有一天想去买饼,找老爹要10个亿去买房子,那么大富翁从银行拿了10个亿给私生子A,让私生子A去买房子
然后另一个孩子,私生子B说,能不能给我10亿,我想买辆车,那么大富翁从银行取了10个亿给私生子B
……………
每一个私生子向大富翁伸手要钱,那么大富翁都会尽量满足私生子,那么私生子依然会认为自己有100亿。
那么有没有可能3个孩子要的钱超过了大富翁的100亿(这种情况是不可能的)为什么不可能???----》原因是大富翁可以拒绝私生子(但是私生子还是会认为自己拥有100亿因为私生子认为大富翁只有他一个私生子)
每个私生子都被画了一张饼,都认为自己有100亿
每一个进程都有一个地址空间,都认为自己独占物理内存!!!!!!!
所以操作系统在创建进程的时候,不仅仅创建PCB块(test_struct),还会创建这个进程对应的mm_struct这样的结构体