物理内存与编程开发中的内存有什么关系,求大神指点
我的问题如下:
内存条我见过,
编程开发中都会用到为变量开辟内存空间,这里内存是在物理内存上吗?
如下是我在网上看到的,
但是没有说的太详细,
回答:
虚拟内存=物理内存+分页文件
回答:
为了编程方便和系统的安全性,人们发明了逻辑地址。在编程的时候写的地址就是逻辑地址,任何32位程序逻辑地址的取值范围都是 0x00000000-0xFFFFFFFF(由于存在安全机制,所有并不是所有地址都可以使用指针直接访问),逻辑地址按照一定的方式转换成物理地址。每个进程的逻辑地址转换之后并不相同。所以这样就隔离的不同的进程,一个进程不能通过指针访问其他进程中的数据,比较安全。另外在一个进程看来,他独享了4GB(其中有一部分被操作系统占用)的内存空间。本程序不需要考虑其他进程的影响,所以编程的时候可以认为本程序独享了4GB的内存,程序写起来比较方便。
编译出来的每段代码都会至少有一个 GDT 数据结构,其中保存了段的基址(每段代码基址不同)。逻辑地址+基址
得到一个线性地址
,但是线性地址还不能直接作为物理地址,因为我们需要一种虚拟内存
技术(每个进程可以独享4GB,多个进程就可能需要的内存超出总内存,那么我们就把与部分数据保存到硬盘上),线性地址再通过查表的方式确定其对应的物理内存地址,CPU中有个cr3
寄存器,存储了页表在内存中的位置,通过一定的规则用查表的方式把线性地址转换为物理地址。如果查表的结果是在硬盘(虚拟内存
)上,那么就需要从硬盘上把这部分数据移到物理内存中,返回这个物理内存的地址[注1]。
注1: 如果内存不够,就会先把部分内存的数据放到虚拟内存里,然后在把需要的数据从虚拟内存读到实际内存。一般情况下个会比较费时,所以如果线性地址查表的结果是在虚拟内存里,会产生一个缺页中断
暂时挂起这个进程。
回答:
如果你只写用户态程序, 关系不大
拿到的内存都是OS给的, 一般不需要关心某个页现在在物理内存还是在交换
回答:
计算机操作系统原理相关的书籍都有介绍。
回答:
操作系统统一管理物理内存。程序向操作系统申请内存。应该就是这样
回答:
系统的内存由操作系统统一管理,程序访问的内存地址都是虚拟内存地址,如果所有的数据都放在物理内存里面显然物理内存是不够用的,所以有一部分数据是存放在虚拟内存(这里指的是利用 硬盘SSD等低速设备虚拟的内存)里面,真正用到的数据才会还缓存在物理内存里面名, 程序中的虚拟内存地址和物理内存有对应关系。
这部分知识 关于操作系统内存管理的书中应该会提到。
以上是 物理内存与编程开发中的内存有什么关系,求大神指点 的全部内容, 来源链接: utcz.com/p/195188.html