开发者社区> 问答> 正文

物理内存与编程开发中的内存有什么关系,求大神指点

我的问题如下:
内存条我见过,
编程开发中都会用到为变量开辟内存空间,这里内存是在物理内存上吗?
如下是我在网上看到的,
但是没有说的太详细,
screenshot

展开
收起
a123456678 2016-06-12 10:48:53 2979 0
2 条回答
写回答
取消 提交回答
  • 平时开发中打交道的概念是虚拟内存,它的目的是给你制造一个平坦地址空间的错觉

    2019-07-17 19:33:26
    赞同 展开评论 打赏
  • 为了编程方便和系统的安全性,人们发明了逻辑地址。在编程的时候写的地址就是逻辑地址,任何32位程序逻辑地址的取值范围都是 0x00000000-0xFFFFFFFF ,逻辑地址按照一定的方式转换成物理地址。每个进程的逻辑地址转换之后并不相同。所以这样就隔离的不同的进程,一个进程不能通过指针访问其他进程中的数据,所以比较安全。另外在一个进程看来,他独享了4GB(其中有一部分被操作系统占用)的内存空间。本程序不需要考虑其他进程的影响,所以编程的时候认为所有本程序独享了4GB的内存,程序写起来比较方便。

    每段代码都需要一个 GDT 数据结构,其中保存了段的基址(每个段不同)。逻辑地址+基址 得到一个线性地址,线性地址是唯一的(如果不同进程转换或后的线性地址相同那么他们是指同一段内存),但是线性地址还不能直接作为物理地址,因为我们需要一种虚拟内存技术(每个进程可以独享4GB,多个进程就可能需要的内存超出总内存,那么我们就把与部分数据保存到硬盘上),线性地址在通过查表的方式确定其对应的物理内存地址。如果查表的结果是在硬盘(虚拟内存)上,那么就需要从硬盘上把这部分数据移到物理内存中,返回这个物理内存的地址[注1]。

    注1: 如果内存不够,就会先把部分内存的数据放到虚拟内存里,然后在把需要的数据从虚拟内存读到实际内存。一般情况下个会比较费时,所以如果线性地址查表的结果是在虚拟内存里,会产生一个缺页中断 暂时挂起这个进程。

    2019-07-17 19:33:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
内存取证与IaaS云平台恶意行 为的安全监控 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载
用户态高速块缓存方案 立即下载