目录
- 1.进程地址空间
-
- 1.进程地址空间认证
- 2.如何理解static变量
- 3.当父子进程没有人修改全局数据的时候父子是共享数据的,但是如果尝试写入了/li>
- 4.为什么操作系统不给我们直接看到物理地址
- 5.进程地址空间到底是什么/li>
- 6.程序被编译的时候,没有被加载的时候,由地址吗区域吗/li>
- 7.为什么要有虚拟内存空间
1.进程地址空间
3.当父子进程没有人修改全局数据的时候父子是共享数据的,但是如果尝试写入了/h2>
代码
运行结果
大概简略是这样的有个页表区分区域来分别存放虚拟地址和物理地址,建立映射关系,可以通过虚拟地址来访问到物理地址
而页表的产生是:将程序加载到内存有程序变成进程之后,由操作系统会给没一个进程构建一个页表结构
6.程序被编译的时候,没有被加载的时候,由地址吗区域吗/h2>
答案:是有地址的,还记得链接吗接是把我们的程序和库产生关联,但是你没有地址怎么链接啊br> 而区域也是有的
readelf -S 文件

那么可能有点懵了,因为没有被加载的时候都有地址了,那么加载的时候在干什么,这二个地址有什么关系
比如 我在一个跑道里,左边是0,右边是100米,我现在是在30米的地方,这个是绝对地址,我傍边有棵树离我5米,这是相对地址,那么不管我左边或者右边的刻度怎么改变,变成100也好200也好,我和树的距离都不会发生改变,而这种相对地址可以理解成和程序开始的相对地址
这个时候我们就能回答之前的问题了,为什么地址一样,但是父子进程打印不同的值,是因为它们的虚拟地址相同,但是物理地址不同了,因为进程具有独立性
当我们子进程想要发生修改,那么操作系统就会给子进程重新开辟一段空间,并且把他的数据写实拷贝下来,重新给子进程建立新的映射关系,也就是改页表的右侧,不改左侧虚拟地址,所以才看到地址相同,但是数据不同
7.为什么要有虚拟内存空间
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33962 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!