面试题:请解释一下什么是虚拟内存?

面试题:虚拟内存和物理内存关系 虚拟内存和物理内存的联系和区别 对于32位的机器,每个进程都认为自己有4G的内存空间,但是实际上虚拟内存对于的物理内存可能只有一点。 进程得到的4G的虚拟内存是连续的地址空间,但是实际上,它是被分割成多个物理内存碎片,还有一些部分存储在外部磁盘存储器中,需要的时候进行数据交换。 进程访问一个地址可能会经历的过程: 每次访问一个地址,首先要把地址翻译成实际的物理内存地址 所有的进程共享一块物理内存... 阅读详情

640?wx_fmt=jpeg

内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:

640?wx_fmt=other

很久之前的内存

很久很久之前,一台机器上只放置一个程序,操作系统仅仅作为一个函数库存在。对于内存来说,除去操作系统的代码和数据占用的一些空间外,其余空间全部分配给正在运行的那个程序,画个图就是这样:

640?wx_fmt=other

小贴士:我们把运行着的程序称之为进程。

同时运行多个程序的内存

后来人们觉得同时在一台计算机上只运行一个程序太亏了,就设计了一个可以同时运行多个程序的机制。不过内存条只有一个,所以这些用户程序只能共享同一个内存条,只能把内存的不同部分划分给不同的用户程序,画个图就像是这样:

640?wx_fmt=other

这样子的话也有一些问题:

  • 不同用户程序只能使用给他们规定好的那部分内存,也就是程序员在敲代码的时候就应该小心翼翼的计算自己使用的内存有没有占到别人家的地儿,这样对码农很不友好有木有。

  • 如果哪个心眼儿坏的家伙故意去读取别人家的程序使用的内存,这不就暴露了么,更严重的,这个坏家伙直接把别人家程序正在使用的内存的某些字节给更新掉,这就是天坑了~

  • 能使用的内存空间都给规定好了,太少了有木有~

虚拟内存

操作系统是个老好人,使命就是解决所有用户感到麻烦的事情。设计操作系统的大叔觉得,如果让用户直接去操作内存的话,用户也不知道其他人到底使用了内存的哪些字节,自己可以使用哪些字节,如果要做到这一点的话人们在开发程序的时候还要聚到一起开个会,把每个人该用哪块内存都规定好,即使规定好了用户还得小心翼翼的避免使用了不属于自己的那部分内存。干脆,干脆就不让用户直接操作内存了,让用户在编程序的时候直接把内存想象成一个非常非常大的字节数组就好了,,自己在这个字节数组上可以随便折腾,他们把这个非常大的字节数组称之为虚拟内存,由操作系统完成从虚拟内存的虚拟地址到真实内存的真实地址之间的映射工作。画个图就像这样:

640?wx_fmt=other

这样还有问题,用户越来越多,即使每个用户都使用非常少的内存空间,那加起来占用的内存空间都可能超过了真实内存的大小,更何况某些丧心病狂的程序员写的程序里本身就使用了超过真正内存大小的空间,这可怎么办。这难不倒设计操作系统的大叔们,他们机智的把硬盘也拉了进来。

640?wx_fmt=other

操作系统完成由虚拟内存地址到真实内存地址或者磁盘地址之间的映射工作,这样子给用户提供的虚拟内存的地址空间就可以非常非常大,用户程序中那些很久都用不到的内存空间可以被操作系统给搞到磁盘上边存储,什么时候需要用了,又从磁盘中加载到真实内存中,重要的是这个过程全部是操作系统自动完成的,对于我们这些码农来说,编写程序就像是在一个炒鸡大的字节数组上将某个地方的数据搬到另一个地方,或者将某个地方的数据经过CPU的某种加工之后再放到某个字节数组的某个地方,整个过程so easy,完全不用担心有没有读取/覆盖掉别人正在使用的内存空间。

小贴士:对于Windows操作系统来说,虚拟内存所需的磁盘空间从系统盘,一般是C盘分配,当你的C盘剩余空间很少时就会导致很卡~

虚拟内存结构

我们说对于敲代码的码农来说,虚拟内存就是一个超级大的字节数组,不过这个字节数组也是被划分为多个部分的,并不是每个地方用户都可以访问,一般的虚拟内存结构长这样:

640?wx_fmt=other

用户需要调用函数的时候,一般都会生成一个称之为栈帧的结构,从而导致虚拟内存中的栈空间增长。

用户需要单独申请内存空间时,就会从堆空间分配,从而导致虚拟内存中的堆空间增长。

这里需要强调的一点是,我们平时所说的操作系统内核不是一个进程,而是指操作系统的代码。

不知不觉我觉得超过了一分钟,下次再见~

网易校园招聘历年经典面试题汇总:C+ 按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。道路是曲折的,前途是光明的!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 阅读详情

相关推荐

操作系统内存管理之虚拟内存

文章目录1.虚拟内存的概念和好处2.刚刚说的共享和保护怎么实现的3.分段和分页的区别,为什么要分段 1.虚拟内存的概念和好处 (提高系统并发性、方便编程、方便共享和保护等等) 2.刚刚说的共享和保护怎么实现的 (分段、锁机制) 3.分段和分页的区别,为什么要分段 (一维地址空间和二维地址空间、对用户透明与不透明等等) ...

有梦想的小新人的博客 1761

Windows下虚拟地址到物理地址的映射——Windows内存管理

Windows内存管理知识总结 本篇文章主要是理解32位Windows操作系统下的虚拟地址到物理地址的映射。 首先我们对Windows的内存管理机制做简要介绍。 Windows为每个进程分配了4GB的虚拟地址空间,让每个进程都认为自己拥有4GB的内存空间。 然后Windows系统把这4GB大小的空间划分为进程和系统两个部分,每个进程可以获得2GB的虚拟内存,根据可用的容量。分配给所有进程的虚拟内...

weixin_43742894的博客 2214

从DDH到FastANI:原核生物分类黄金标准的进化史与技术对比

本文系统梳理了原核生物分类标准从DDH到FastANI的四次技术革命,详细解析了95%相似度阈值的科学依据及应用场景。通过对比DDH、16S rRNA、ANI和FastANI的技术特点与性能指标,为微生物研究者提供基因组分类的实战指南,并展望第三代测序时代的分类新挑战。

weixin_29275257的博客 415

JAVA面试题分享三百九十一:32 位 4GB 系统,访问 2GB 数据,虚拟内存会发生什么?

在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大....所以,TCP 不能忽略网络上发生的事,它被设计成一个无私的协议,当网络发送拥塞时,TCP 会自我牺牲,降低发送的数据量。于是,就有了拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。为了在「发送方」调节所要发送数据的量,定义了一个叫做「拥塞窗口」的概念。

之乎者也·的博客 1009

CMOS传输门实战:如何用模拟开关优化你的电路设计(附常见问题排查)

本文深入探讨了CMOS传输门在电路设计中的实战应用与优化策略。文章从核心参数选型入手,详细分析了导通电阻、电荷注入等关键特性对电路性能的影响,并提供了多路复用器构建、精密电路应用等实战架构。同时,重点分享了PCB布局、电源去耦的工程细节,以及开关不导通、信号失真、高频性能不足等常见问题的系统性排查指南,旨在帮助硬件工程师充分发挥CMOS模拟开关的效能,提升电路设计的可靠性与精度。

js777的博客 451

手把手教你用Arduino和开源电路DIY一个手机连接的电化学传感器(附GitHub源码)

本文详细介绍了如何利用Arduino和开源电路DIY一个手机连接的电化学传感器,成本不到300元即可复现价值数千元的专业设备。从硬件选型、电路搭建到固件开发和手机应用实现,手把手教你完成整个项目,特别适合科研人员、环境监测爱好者和理工科学生。附GitHub源码,方便快速上手和扩展功能。

weixin_42561040的博客 336

操作系统面试题总结

操作系统 面试题

bulaganhuisi的博客 699

同济土木非0基础三个月跨考复旦计算机攻略

跨考cs攻略前言我cs专业课如何复习How to start from zero简历其他复试 前言 建议多去工地/化工厂涡轮增压一下 我 同济土木gpa 3.2/5 挂科 * n 辣鸡项目 * n (padding 简历) 21考复旦计算机专硕 10月-12月 学习+复习 总分392 政治 68;背肖4即可 英语二 78 裸考,(高考英语140+);做点真题,建议据自己情况准备 数学二 142 ;(高考数学接近满分);做真题+模拟题,每天写一张试卷 专业课 104 ,考试生病了,下文展开。 cs专业课

piglake的博客 7238

请解释什么是左外连接_面试题:请解释一下什么是虚拟内存?

内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:很久之前的内存很久很久之前,一台机器上只放置一个程序,操作系统仅仅作为一个函数库存在。对于内存来说,除去操作系统的代码和数据占用的一些空间外,其余空间全部分配给正在运行的那个程序,画个图就是这样:小贴士:我们把运行着的程序称之为进程。同时运行多个程序的内存后来人们觉得同时在一台计算机上只运行一个程序太亏了,就...

weixin_39867212的博客 109

YOLOv8 + TensorRT 实战:手把手教你用 C++ 实现实时视频流目标检测(附完整项目代码)

本文详细介绍了如何将YOLOv8与TensorRT结合,通过C++实现实时视频流目标检测的全流程。从环境配置、模型转换优化到视频处理架构设计,手把手教你构建高性能检测系统,并附完整项目代码。特别针对Windows平台下的TensorRT模型加速部署提供了实用技巧和性能优化方案。

weixin_29051193的博客 347

DSP28335笔记——内部Flash中进行数据读写(Flash_API的使用)

Program时的报错返回值较为常见,对返回值30、31进行详解:返回值为30:每次操作写入16位的字节,直到Buffer中的数据全部写入,若写入的数据位超过16位时则返回值30。返回值为31:表示尝试将已有数据位上的0写成1。一般情况下,在Program操作之前,会将指定部分中的数据进行擦除;但擦除函数执行时间较久,且只能以扇区为单位进行擦除,因此也可以在已有数据的基础上再进行Program,但无法将已有数据的位中的0值写成1。

m0_46621336的博客 8752

操作系统面试题:虚拟内存是什么,解决了什么问题,如何映射?

虚拟内存是什么? 虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。 当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合。 当RAM运行速率缓慢时,它便将数据从RAM移动到称

weixin_44844089的博客 5184

网络工程师面试题汇总(二)

网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。地址解析协议 ARP(Address Resolution Protocol)

悦分享 185

操作系统面试题(十四):什么是虚拟内存?

虚拟内存(virtual Memory) 日常生活中,当我们使用电脑的时候,尤其是windows电脑,经常会打开许多软件,这些软件占用的内存已经远远大于计算机的物理内存。之所以会这样,就是因为虚拟内存的存在 虚拟内存可以让程序拥有超过系统实际物理内存大小的可用内存空间 虚拟内存会为每个进程提供一个一致的,私有的地址空间,它让每个进程都拥有一片连续完整的内存空间,这样能更加有效管理内存并减少出错 虚拟内存是计算机系统内存管理的一种技术,可以手动设置电脑的虚拟内存 虚拟内存的一个重要意义:定义了一个连...

小杨的博客 3798

Python 爬虫实战:爬取 Bing 搜索功能链接(国际搜索引擎数据采集技巧)

在当今数字化信息爆炸的时代,搜索引擎已成为我们获取知识、了解世界的得力助手。Bing,作为全球知名的搜索引擎之一,拥有庞大的数据索引和精准的搜索算法。通过 Python 爬虫技术爬取 Bing 搜索区域的链接信息,不仅能帮助我们快速收集大量有价值的数据,还能为后续的数据分析、内容挖掘等任务提供丰富的素材。

yansideyucsdn的博客 1340

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

高频面试题——你真的搞懂物理内存与虚拟内存了吗

​虚拟内存是什么? 这是一个面试中经常被提到的问题,大多数人可能只记住了内存地址映射和缺页置换,但你真的搞懂了为什么会有虚拟内存了吗,它存在的作用是什么呢? 要想搞懂虚拟内存,我们先从头来回顾一下虚拟地址分段分页的知识吧。 一、 虚拟地址空间 在早期的计算机中,程序是直接运行在物理内存上的,那个时候的计算机和程序内存都很小。程序运行时会把其全部加载到内存,只要程序所需的内存不超过计算机剩余内存就不会出现问题。 但由于程序是可以直接访问物理内存的,这也带来了内存数据的不安全性,轻则程序挂掉,重则操作

程序员面试精选【codeoffer】 1566

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java面试必备:Windows 和 Linux 操作系统虚拟内存机制比较

虚拟内存是现代操作系统的重要功能之一,它通过将物理内存和磁盘存储结合起来,为应用程序提供了比实际物理内存更大的地址空间。Windows 和 Linux 作为两大主流操作系统,在虚拟内存的实现上有着显著差异。本文将深入比较两者的虚拟内存机制。

qq_58299462的博客 2194

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java经典面试题整理及答案详解(八)

简介: Java经典面试题第八节来啦!本节面试题包含了进程、线程、Object类、虚拟内存等相关内容,希望大家多多练习,早日拿下心仪offer~ 了解更多:Java经典面试题整理及答案详解(一)Java经典面试题整理及答案详解(二)Java经典面试题整理及答案详解(三)Java经典面试题整理及答案详解(四)Java经典面试题整理及答案详解(五)Java经典面试题整理及答案详解(六)Jav...

阿里云开发者 4696

这可能最全的操作系统面试题

文章目录操作系统简介篇解释一下什么是操作系统操作系统的主要功能软件访问硬件的几种方式解释一下操作系统的主要目的是什么操作系统的种类有哪些为什么 Linux 系统下的应用程序不能直接在 Windows 下运行操作系统结构单体系统分层系统微内核客户-服务器模式为什么称为陷入内核什么是用户态和内核态用户态和内核态是如何切换的?什么是内核什么是实时系统Linux 操作系统的启动过程进程和线程篇多处理系统的优势什么是进程和进程表什么是线程,线程和进程的区别什么是上下文切换使用多线程的好处是什么进程终止的方式进程的终止

程序员cxuan的个人主页 4万+

(转载)虚拟内存和句柄

转载自:图解说明——究竟什么是Windows句柄 - 同勉共进 - 博客园 最近项目小组在新项目中,工作内容涉及到对句柄的调用和封装。故此学习和了解到句柄的概念,故此在网上查阅资料和学习。 先看百度百科:句柄_百度百科 句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。 Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,...

yys197的博客 844

esp32查询剩余内存_高频面试题——你真的搞懂物理内存与虚拟内存了吗

虚拟内存是什么?这是一个面试中经常被提到的问题,大多数人可能只记住了内存地址映射和缺页置换,但你真的搞懂了为什么会有虚拟内存了吗,它存在的作用是什么呢?要想搞懂虚拟内存,我们先从头来回顾一下虚拟地址和分段分页的知识吧。一、虚拟地址空间在早期的计算机中,程序是直接运行在物理内存上的,那个时候的计算机和程序内存都很小。程序运行时会把其全部加载到内存,只要程序所需的内存不超过计算机剩余内存就...

weixin_34524284的博客 657

Linux 虚拟内存管理

Linux 虚拟内存的管理 虚拟内存空间=用户空间+内核空间

Mi-ronin的博客 964

虚拟内存 :一个程序最多能使用多少内存?

内存虚拟化技术是为了解决内存不足和进程间内存隔离的问题。随着程序复杂度的增加,内存需求也在膨胀,传统的Swap技术虽然能通过将不活跃的进程数据交换到磁盘来腾出内存空间,但存在碎片化和频繁切换的问题。虚拟内存技术通过将内存划分为页(Page),并利用页表(Page Table)管理虚拟地址到物理地址的映射,有效解决了这些问题。虚拟内存理论上可以无限大,实际受限于CPU的处理能力。操作系统通过页表管理虚拟内存和物理内存的映射,将高频使用的数据保留在内存中,低频使用的数据保存到磁盘上,从而优化内存使用效率。此外,

哀莫大于心死 1102

2024年运维最全手把手教您扩展SWAP虚拟内存_swp虚拟内存,2024年最新Linux运维面试经历

不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?5、LVS、Nginx、HAproxy有什么区别?9、讲述一下Tomcat8005、8009、8080三个端口的含义?7、Tomcat和Resin有什么区别,工作中你怎么选择?13、RabbitMQ是什么东西?

m0_61549984的博客 959

虚拟内存(Virtual Memory)

是计算机系统内存管理非常重要的一个技术,本质上来说它只是逻辑存在的,是一个假想出来的内存空间,主要作用是作为进程访问主存(物理内存)的桥梁并简化内存管理。

m0_62600503的博客 828
上一篇: 倒排索引的精致结构
下一篇: 要飞起来了,Lucene 高阶查询技巧
码洞
博客等级 码龄10年 41粉丝 137原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值