虚拟内存

Posted 哦摩西罗伊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟内存相关的知识,希望对你有一定的参考价值。

 

虚拟内存这个概念,大家都不会陌生。有人会说虚拟内存还不简单,不就是在内存不够的时候,就把外存当内存来使用,这种说法有一定的道理,但显然不准确。在最开始内存只有128M或者256M时,内存显然是不够的,在这种情况下说内存不够的话,拿外存来顶替,这种说法还过得去。但现在8g内存,16g内存,甚至32g内存都很普遍,现在的内存显然是足够用的,但我们仍然需要虚拟内存,上面那种说法显然站不住脚。

 

下面开一个游戏,本人电脑内存8G。

可以看到RAM一栏中,3853MB是指内存的消耗,而后面的5408MB则是虚拟内存消耗(更准确的是分页文件),这里内存显然没有超过8G,那为什么还需要虚拟内存呢?

为了解释虚拟内存,我们首先要弄清楚虚拟地址和真实的物理地址

虚拟地址也叫逻辑地址:

上图的程序输出了指针b指向的地址0x6afef8,这是用16进制表示的,但这个并不是真实的地址,只是逻辑上的地址。

作为计算机用户,我们并不能接触真实的物理地址,只能接触到逻辑地址,而逻辑地址到物理地址的映射,是由操作系统完成的,准确来说是通过分页和分段的技术完成的。逻辑地址的大小是人为确定的,一般会比物理地址大很多,当程序要访问的资源找不到时,可以将其调入到内存中,没有用的资源调入到外存。这也就是常说的页面置换,这个常被调入和调出的文件叫做分页文件,这样就好像我们有很大的’内存‘空间一样。这里我们就可以解释为什么内存明明还很充裕的情况下,依然会存在分页文件。

 

计算机用户只能接触到逻辑地址,而逻辑地址往往比真实的物理地址大很多,当操作系统通过逻辑地址映射到物理地址的时候,可能会出现找不到所需要的资源,也就是缺页,这个时候就需要从外存调入资源了,这也就是为什么明明内存足够,却依然存在分页文件。

 

有人就会说,既然现在的内存已经这么大了,能不能不使用虚拟内存这种内存管理技术?

如果没有虚拟内存的话,那么我们在开发程序时,就需要考虑物理地址的对齐,内存碎片等一系列问题,使得程序开发变得极为困难,并且当程序需要的内存超过系统内存大小时,程序是无法启动过的。

 

通过这种内存管理技术它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。通过这种方式可以加快程序的运行速度,同时又做到了内存容量变大的效果。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。当然资源频繁的调入和调出,势必会降低运行速度,让系统变得特别卡,这个时候就可以考虑加内存条了。

 

总结:虚拟内存就是逻辑上的内存,它是一种内存管理技术,它管理逻辑地址到物理地址的映射,通过资源的调入和调出,达到了内存变大的效果,这是由操作系统来完成的。

           

以上是关于虚拟内存的主要内容,如果未能解决你的问题,请参考以下文章

内存和虚拟内存优先使用哪个?

VMware虚拟机里提示虚拟内存过小,如何处理?

虚拟机显示物理内存不足怎么解决

vmware 虚拟机实际使用的内存超过分配的内存在使用啥?

vmware(虚拟机) 内存分配问题

虚拟内存提示读写速度不够?