[Linux]进程地址空间

1.有趣的现象

fork之后代码共享,那存放数据的地址会是一样的吗?
我们用代码来验证一下
在这里插入图片描述
在这里插入图片描述
这里我们发现了一个问题,同一个变量,内容不一样但是地址是一样的。
结论:

  • 父子进程输出的变量不是同一个
  • 这个地址不是物理地址,在linux中这种地址叫做虚拟地址(线性地址)

我们在c/c++中的地址都是虚拟地址,而物理地址是操作系统来统一管理的!

2.进程地址空间

在这里插入图片描述
这个图片我们都见过;
进程地址空间,每一个进程,都会存在一个进程地址空间,32 [0,4GB]
进程地址空间是数据结构,具体到进程中,就是特定数据结构的对象!
我们的地址空间不具备对我们的代码和数据保存的能力,保存代码和数据是放在物理内存中
将地址空间上的地址(虚拟地址)转化到物理内存中这就是页表的映射
这个进程地址空间,就是OS给我们提供的虚拟地址,当然他不能具备保存数据和代码,那么如何让虚拟地址和物理地址之间建立联系,这就需要页表了,
在这里插入图片描述
页表的优点:

  1. 让物理内存从无序变成有序,让进程以统一的视角,看待内存
  2. 将进程管理和内存进行解耦合
  3. 地址空间+页表是保护内存安全的重要手段

补充:内存申请

在这里插入图片描述
好处:充分保证内存的利用率,不会空转
提升new和malloc的速度
当我们在内存中申请空间时,不是直接给我们物理内存,而是在地址空间中开辟资源,当我们尝试写入资源时,操作系统会进行缺页中断,给我们建立和物理内存映射关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tpoog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值