网站简繁体转换代码,各大平台推广,搜索引擎优化策略应该包括,黄页号码是啥一分钟系列#xff1a;什么是虚拟内存#xff1f;
转自#xff1a;https://mp.weixin.qq.com/s/opMgZrXV-lfgOWrNUMKweg
注#xff1a;一分钟系列的篇幅都不长#xff0c;适合吃饭蹲坑、地铁公交上食用#xff5e;
内存对于用户来说就是一个字节数组#xff0c;我们可…一分钟系列什么是虚拟内存
转自https://mp.weixin.qq.com/s/opMgZrXV-lfgOWrNUMKweg
注一分钟系列的篇幅都不长适合吃饭蹲坑、地铁公交上食用
内存对于用户来说就是一个字节数组我们可以根据地址来访问到某个字节或者某些字节 很久之前的内存
很久很久之前一台机器上只放置一个程序操作系统仅仅作为一个函数库存在。对于内存来说除去操作系统的代码和数据占用的一些空间外其余空间全部分配给正在运行的那个程序画个图就是这样 小贴士我们把运行着的程序称之为进程。 同时运行多个程序的内存
后来人们觉得同时在一台计算机上只运行一个程序太亏了就设计了一个可以同时运行多个程序的机制。不过内存条只有一个所以这些用户程序只能共享同一个内存条只能把内存的不同部分划分给不同的用户程序画个图就像是这样 这样子的话也有一些问题
不同用户程序只能使用给他们规定好的那部分内存也就是程序员在敲代码的时候就应该小心翼翼的计算自己使用的内存有没有占到别人家的地儿这样对码农很不友好有木有。如果哪个心眼儿坏的家伙故意去读取别人家的程序使用的内存这不就暴露了么更严重的这个坏家伙直接把别人家程序正在使用的内存的某些字节给更新掉这就是天坑了能使用的内存空间都给规定好了太少了有木有
虚拟内存
操作系统是个老好人使命就是解决所有用户感到麻烦的事情。设计操作系统的大叔觉得如果让用户直接去操作内存的话用户也不知道其他人到底使用了内存的哪些字节自己可以使用哪些字节如果要做到这一点的话人们在开发程序的时候还要聚到一起开个会把每个人该用哪块内存都规定好即使规定好了用户还得小心翼翼的避免使用了不属于自己的那部分内存。干脆干脆就不让用户直接操作内存了让用户在编程序的时候直接把内存想象成一个非常非常大的字节数组就好了自己在这个字节数组上可以随便折腾他们把这个非常大的字节数组称之为虚拟内存由操作系统完成从虚拟内存的虚拟地址到真实内存的真实地址之间的映射工作。画个图就像这样 这样还有问题用户越来越多即使每个用户都使用非常少的内存空间那加起来占用的内存空间都可能超过了真实内存的大小更何况某些丧心病狂的程序员写的程序里本身就使用了超过真正内存大小的空间这可怎么办。这难不倒设计操作系统的大叔们他们机智的把硬盘也拉了进来。 操作系统完成由虚拟内存地址到真实内存地址或者磁盘地址之间的映射工作这样子给用户提供的虚拟内存的地址空间就可以非常非常大用户程序中那些很久都用不到的内存空间可以被操作系统给搞到磁盘上边存储什么时候需要用了又从磁盘中加载到真实内存中重要的是这个过程全部是操作系统自动完成的对于我们这些码农来说编写程序就像是在一个炒鸡大的字节数组上将某个地方的数据搬到另一个地方或者将某个地方的数据经过CPU的某种加工之后再放到某个字节数组的某个地方整个过程so easy完全不用担心有没有读取/覆盖掉别人正在使用的内存空间。 小贴士对于Windows操作系统来说虚拟内存所需的磁盘空间从系统盘一般是C盘分配当你的C盘剩余空间很少时就会导致很卡 虚拟内存结构
我们说对于敲代码的码农来说虚拟内存就是一个超级大的字节数组不过这个字节数组也是被划分为多个部分的并不是每个地方用户都可以访问一般的虚拟内存结构长这样 用户需要调用函数的时候一般都会生成一个称之为栈帧的结构从而导致虚拟内存中的栈空间增长。
用户需要单独申请内存空间时就会从堆空间分配从而导致虚拟内存中的堆空间增长。
这里需要强调的一点是我们平时所说的操作系统内核不是一个进程而是指操作系统的代码。
不知不觉我觉得超过了一分钟下次再见 来源微信公众号
作者小孩子4919
原文虚拟内存是个啥 | 一分钟系列