程序地址空间(上)

目录 :

          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这样的结构体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值